Testing fetch con Cypress
2019/05/04
Cuando usamos Cypress y se está usando fetch veremos que no somos capaces de esperar a la ejecución de esas llamadas. Este fallo ocurre porque Cypress no puede espiar a fetch y debemos eliminarlo en Cypress.
Deberemos eliminarlo en cada spec que creemos, cargando un polyfill que puede espiarse, y llamándolo en cada llamada a cy.visit
describe('Spec description', () => {
let polyfill;
before(() => {
const polyfillUrl = 'https://unpkg.com/unfetch/dist/unfetch.umd.js';
cy.request(polyfillUrl)
.then((response) => {
polyfill = response.body
});
});
let deleteFetch = () => ({
onBeforeLoad(win)
{
delete win.fetch;
win.eval(polyfill);
win.fetch = win.unfetch;
}
});
De esta forma podremos hacer nuestros tests preocupandonos exclusivamente de añadir la llamada a deleteFetch()
it('Test description', () => {
cy.server();
cy.route({
method: 'get',
url: API_DOMAIN + '/products'
}).as('productList');
cy.visit('/', deleteFetch());
cy.wait('@productList');
...
});