Estoy probando varios filtros (están en el back-end) para un tablero usando la función de espionaje escrita before(() => {...}) bloque:
function aliasQuery( request: CyHttpMessages.IncomingHttpRequest, operationName: string, ): void { const { body } = request; if (body.operationName === operationName) { request.alias = operationName; } } export function spyOnGraphQL(operationName: string): void { cy.fixture('hosts').then(({ graphQLHostname }) => { cy.intercept(ApiMethods.Post, graphQLHostname, (request) => { aliasQuery(request, operationName); }); }); } Luego dentro for bucle uso
cy.wait(`@${operationName}`).should(({response}) => {...})para comprobar los filtros uno por uno.
Sin embargo, hay problemas, después de usar todos los filtros y obtener resultados, necesito restablecer todos los filtros enviando otra solicitud de graphql, el nombre de consulta de esta solicitud coincide con el nombre de consulta del filtro, por lo que cuando se vuelve a llamar a cy.wait , detecta la solicitud de restablecimiento de filtros que rompe todo. Dice así:
cy.wait , captura la solicitud 1cy.wait , detecta la solicitud 2 -> Ahí es donde comienzan los problemas ¿Hay alguna forma de limpiar las solicitudes capturadas por cy.intercept antes de aplicar un nuevo filtro? ¿O al menos distinguir la solicitud de reinicio de la solicitud de filtro utilizando la carga útil de la solicitud, por ejemplo?
No encontré una manera de limpiar la cola de solicitudes, pero pude usar una devolución de llamada adicional para ignorar algunas solicitudes dándoles un alias diferente.
function aliasQuery( request: CyHttpMessages.IncomingHttpRequest, operationName: string, callback?: TypeAliasQueryCallback, ): void { const { body } = request; if (body.operationName === operationName) { request.alias = operationName; if (typeof callback === 'function') { callback(request); } } } export function spyOnGraphQL( operationName: string, callback?: TypeAliasQueryCallback, ): void { cy.fixture('hosts').then(({ graphQLHostname }) => { cy.intercept(ApiMethods.Post, graphQLHostname, (request) => { aliasQuery(request, operationName, callback); }); }); } export function ignoreResetRequest( request: CyHttpMessages.IncomingHttpRequest, ): void { const { body } = request; // Checking if the filters are sent (resetting sends empty array) if (!body.variables.filter.and.length) { request.alias = 'ignored'; } } spyOnGraphQL('some_operation_name', ignoreResetRequest);