Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

200
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!