Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

190
Vistas
Manejo de varias llamadas a la API de una sola llamada a la API

Con mi equipo, estamos tratando de implementar un comando para una operación muy común para la lógica comercial, pero tengo problemas para manejar su implementación. Básicamente:

  1. Tenemos que recuperar una matriz de objetos (GET).

  2. Para cada uno de esos objetos tenemos que recuperar (GET) otro objeto dentro de su padre .

  3. Para cada uno de esos subobjetos (hijos) tenemos que verificar una condición y si es la condición deseada recuperamos el hijo, de lo contrario pasamos nulo.

P: ¿Cómo manejo varias llamadas a la API que dependen de una única llamada a la API sin salirme de la cadena CY?

Esta es mi implementación actual (no funciona pero explica un poco la lógica deseada)

 Cypress.Commands.add('myCommand', (sumCriteria: Function, anotherCriteria: Function) => { // I only retrieve fathers with certain criteria return cy.request('GET', fathersUrl).its('body').then(fatherObjects => { return fatherObjects.filter(father => father.childs.length && father.childs.find(sumCriteria)) }).then(filteredFathers => { filteredFathers.forEach(father => { // For each father I retrieve a single child const targetChildId = father.childs.find(sumCriteria).id; // For each single child I retrieve its data and evaluate if it has the needed criteria cy.request('GET', `${childsUrl}/${targetChildId}`) .its('body') .then(property => anotherCriteria(property)) }) }); })

¡Gracias por adelantado!

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Casi tiene el patrón correcto, pero en lugar de devolver resultados, póngalos en la cola.

Cypress hace dos cosas para que esto funcione

  • en un comando personalizado, espera a que se resuelvan los comandos asincrónicos
  • devuelve lo que está en la cola en la última evaluación
 Cypress.Commands.add('myCommand', (sumCriteria, anotherCriteria) => { cy.request('GET', fathersUrl) .its('body') .then(fatherObjects => { const filteredFathers = fatherObjects.filter(father => { return father.childs.find(sumCriteria) }); const results = [] filteredFathers.forEach(father => { cy.request('GET', father) // waits for all these to resove .its('body') .then(property => anotherCriteria(property)) }) cy.then(() => results) // returns this last queued command }) })

Un ejemplo reproducible:

 Cypress.Commands.add('myCommand', (sumCriteria, anotherCriteria) => { const fathersUrl = 'https://jsonplaceholder.typicode.com/todos/1' cy.request('GET', fathersUrl) .then(() => { // simulated url extraction const filteredFathers = [ 'https://jsonplaceholder.typicode.com/todos/2', 'https://jsonplaceholder.typicode.com/todos/3' ] const results = [] filteredFathers.forEach(father => { cy.request('GET', father) .then(res => { results.push(res.body.id) }) }); cy.then(() => results) }); }) cy.myCommand() .should('deep.eq', [2,3]) // ✅ passes
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda