Estoy probando una aplicación basada en un folleto de reacción en ciprés. Para evitar hacer toneladas de solicitudes de maptile reales, estoy tratando de interceptar llamadas al servidor maptile de mapbox y reemplazarlas con un mosaico ficticio. Hago esto en mi archivo cypress/support.index.js :
/** * Intercept all calls for mapbox tiles and replace with dummy tile */ beforeEach(() => { console.log("in beforeach"); cy.intercept("https://api.mapbox.com/**/*", { fixture: "images/tile.png", }); });Una prueba sencilla:
describe("The map", () => { it("Tiles should be dummy tiles, not actual tiles", () => { cy.visit("http://localhost:3000"); }); }); Eché un vistazo a los recursos de folletos simulados en Cypress y esta táctica pareció funcionar para esta persona. Cuando ejecuto una prueba, veo el registro in beforeach , por lo que sé que se está ejecutando. Sin embargo, en mi prueba, ni siquiera veo las llamadas que hace el folleto para obtener mosaicos en la lista de solicitudes de red. Como ve a la izquierda, solo veo solicitudes XHR. Pero cuando abro la pestaña de red de Cypress Runner, claramente estamos solicitando los mosaicos (cosas patentadas encubiertas):
¿Por qué Cypress ni siquiera muestra las llamadas que se realizan para obtener mosaicos de mapas? ¿Por qué no se interceptan las llamadas y se reemplazan los mosaicos con el ficticio?
Estoy usando Cypress 9.5.2, ejecutando Chrome 99, con Leaflet 1.7.1 y NexJS 10.2.0.
Creo que podría obtener mosaicos de mapas del caché, al menos eso es lo que encontré al probar la intercepción en mi proyecto.
Consulte Problemas de intercepción de Cypress: respuesta en caché
El servidor determina la "clave de caché" de datos en este caso al observar el encabezado de solicitud si no coincide enviado por la aplicación web.
Prueba esto para deshabilitar el almacenamiento en caché
cy.intercept('https://api.mapbox.com/**/*', req => { delete req.headers['if-none-match']; req.reply({ fixture: 'images/tile.png' }) })Lo anterior funcionó y luego no, y no puedo entenderlo.
Como alternativa, puede activar el interruptor en devtools de la siguiente manera
cy.wrap(Cypress.automation('remote:debugger:protocol', { command: 'Network.clearBrowserCache', })) cy.intercept("https://api.mapbox.com/**/*", { fixture: "images/tile.png", })Dado que está utilizando Next, ¿la aplicación obtiene los mosaicos en el servidor antes de que se cargue la página?
Sé que hay varios interruptores/modos, pero no mencionaste SSR, así que parece que deberías considerarlo.
Sin detalles de la aplicación, es difícil darte el código, pero aquí hay un poco de código.
que puede ser útil.