Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

198
Vistas
¿Cómo fuerzo los tiempos de espera en Jest para probar los errores de tiempo de espera?

Tenemos una función en nuestro proyecto React para obtener una lista de tiendas. Si la recuperación tarda más de 10 segundos, abortamos la solicitud y mostramos un error.

 const controller = new AbortController(); const getTimeout = setTimeout(() => controller.abort(), 10000); const fetchStores = storeId => ( ourFetchStoresFunction(`http://my-api/${storeId}`, { headers: { 'x-block': 'local-stores' }, signal: controller.signal }) .then((results) => { clearTimeout(getTimeout); return results }) .catch((err) => { throw err; }) );

Aquí está la prueba básica para la función fetchStores :

 it('fetchStores should return a stores array', () => { storesAPI.fetchStores(MOCK_STORES) .then((stores) => { expect(Array.isArray(stores)).toBe(true); }) .catch(); });

¿Cómo me burlo de este tiempo de espera en Jest?

usar setTimeout en el bloque .then al llamar a ese método no funcionó. Además, preferiría NO tener que esperar 10 segundos durante la prueba. Busqué jest.useFakeTimers pero no llegué a ninguna parte.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Podría probar los temporizadores globales, lea aquí: jestjs.io/docs/timer-mocks Puede usar la función jest spyOn. Por ejemplo:

 let timeoutSpy; beforeEach(() => { timeoutSpy = jest.spyOn(global, 'setTimeout'); }); afterEach(() => { jest.restoreAllMocks(); })

Luego, en su prueba, puede esperar (tymepoutSpy).toHaveBeenCalledTimes(1); Algo como esto debería funcionar, funcionó en mi caso.

En su caso, también puede burlarse del controlador, nuevamente usando jest.spyOn, podría ser algo como esto:

let abortSpy;

En el mismo beforeEach puedes configurarlo:

abortSpy = jest.spyOn(AbortController.prototype, 'abort');

Y supongo que nuestra función FetchStoresFunction es similar a fetch.

Y finalmente, puede simular la función de búsqueda, por lo que lleva mucho tiempo cargar, se puede hacer de esta manera:

 > global.fetch = jest.fn(() => Promise.resolve({ // set some time }) > );
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda