Tengo un problema en el que el caso final del bloque test.each a continuación parece ejecutarse con la implementación real de fetch() en lugar de la versión espía.
describe('renders correct number of components', () => { afterEach(() => { jest.restoreAllMocks(); }); test.each([1,2,3,4])('renders %i components', async (componentCount) => { jest.spyOn(window, 'fetch').mockResolvedValueOnce({ json: async () => ({ components: componentCount }) } as Response); render(<ParentComponent />); expect(await screen.findAllByText(/my component/i)).toHaveLength(componentCount); }); });La implementación real es:
const getSomeData = async (): Promise<ComponentData> => { const res = await fetch('http://localhost:8080', { method: "GET" }); return res.json(); } Cuando ejecuto las pruebas, las primeras 3 pasan bien, sin embargo, la cuarta arroja un Error: connect ECONNREFUSED 127.0.0.1:8080 . Si quito la 4ta prueba pasa lo mismo con la 3ra.
Si cambio http://localhost:8080 a algo como https://google.com , aparece una advertencia sobre un "proceso de trabajo que no se cierra correctamente", pero todas las pruebas pasan y no hay errores.
Me parece que de alguna manera el fetch() restaurado está llegando a la prueba final sin ser burlado por spyOn() pero por mi vida no puedo ver cómo.