Estoy tratando de agregar una wait a todas las solicitudes a /graphql . Me gustaría que las solicitudes esperaran automáticamente. Sin embargo, recibo el siguiente error:
Cypress detectó que usted devolvió una promesa de un comando al mismo tiempo que invocaba uno o más comandos cy en esa promesa.
He intentado varias formas de agregarlo (tenga en cuenta que estoy configurando el alias como se menciona aquí ):
Before(() => { cy.intercept('POST', '**/graphql', handleGraphql); }); function handleGraphql(req) { req.alias = `gql${req.headers['query-id']}Query`; // The different ways that I have tried: setTimeout(() => cy.wait(`@gql${req.headers['query-id']}Query`), 100); new Cypress.Promise(() => cy.wait(`@gql${req.headers['query-id']}Query`)) }Entonces también probé esta función:
function handleGraphql(req) { req.alias = `gql${req.headers['query-id']}Query`; cy.wait(`@gql${req.headers['query-id']}Query`); }pero luego me sale el siguiente error:
Se agotó el tiempo de reintento después de 5000 ms: cy.wait() se agotó el tiempo de espera de 5000 ms para la primera solicitud a la ruta: gql9b93b362-d715-4aae-928b-71b406381350Query. Nunca se produjo ninguna solicitud.
Descubrí que puede agregar algunos eventos al req , pero ninguno de ellos parece hacer lo que quiero, ya que recibo returned a promise desde arriba.
function handleGraphql(req) { req.alias = `@gql${req.headers['query-id']}Query`; req.continue(() => { cy.wait(`@gql${req.headers['query-id']}Query`); }); }Cypress detectó que devolviste una promesa de un comando... se refiere al hecho de que estás esperando el alias de intercepción dentro del controlador.
Dado que el controlador es un código de respuesta de evento, el patrón habitual es
cy.intercept(...) // set up the listener cy.visit(...) // trigger the events (might also be from UI evnt like click()) cy.wait('@my-alias')Pero esto significa que los alias deben conocerse con anticipación.
Lo más simple es si puedes encontrar todas las identificaciones,
const aliases = ['1', '2', '3'].map(id => `@gql${id}Query`) const handleGraphql = (req) => req.alias = `gql${req.headers['query-id']}Query`; before(() => { cy.intercept('POST', '**/graphql', handleGraphql) // set up the listener }) it('waits for all ids', () => { cy.visit(...) // trigger the events (might also be from UI event like click()) cy.wait(aliases) }Si no puede ser específico acerca de las identificaciones, debe esperar un tiempo arbitrario para que se realicen todas las solicitudes (lo cual es inestable si la espera es demasiado corta o molesto si la espera es demasiado larga) o afirmar un elemento o otro artefacto DOM que solo aparece después de que finalizan todas las solicitudes.
Se generan sus identificaciones, así que no las use en el alias. Use un alias "genérico" y espere el conteo requerido
const calls = 4 before(() => { cy.intercept('POST', '**/graphql').as('gqlQuery') }) it('waits for all ids', () => { cy.visit(...) // trigger the events (might also be from UI event like click()) cy.wait(`@gqlQuery.${calls}`) } Hay algunas advertencias sobre la sintaxis de alias.n sin documentar, pero podría sub-en
Cypress._.times(calls => cy.wait('@gqlQuery')