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

437
Vistas
Probando una función que tiene una Promesa y setTimeout, ¿por qué se agota el tiempo?

Estoy tratando de probar una función que tiene setTimeout dentro de una promesa. Sin embargo, sigue agotando el tiempo.

Esta es la función:

 export const sleep = async (duration: number): Promise<void> => { await new Promise<void>((resolve) => { setTimeout(resolve, duration); }); if (process.env.NODE_ENV === "test") { console.log("sleep end"); } };

Y esta es mi prueba:

 import { sleep } from "../../helpers/utils"; console.log = jest.fn(); jest.useFakeTimers(); test("calls sleep with correct argument and calls console.log", async () => { const NODE_ENV = "test"; const SLEEP_DURATION = "100"; process.env = { ...process.env, NODE_ENV, SLEEP_DURATION }; const timeoutSpy = jest.spyOn(global, "setTimeout"); await sleep(+SLEEP_DURATION); jest.runAllTimers(); expect(sleep).toHaveBeenCalledWith(+SLEEP_DURATION); expect(timeoutSpy).toHaveBeenCalledWith(+SLEEP_DURATION); expect(console.log).toHaveBeenCalledWith("sleep end"); });

El problema es que cuando intento ejecutar esto, la prueba falla y da este mensaje:

 thrown: "Exceeded timeout of 5000 ms for a test. Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

jest.setTimeout(10000) que arroja un error de Exceeded timeout of 10000ms ...

¿Alguna idea de por qué sucede esto? O como arreglarlo.

¡Gracias!

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

0

Aquí hay una solución que se acerca más a lo que está buscando. Es importante destacar que no puede await la resolución de la promesa utilizando temporizadores falsos o nunca se resolverá. En su lugar, puede llamar a asignar el valor de retorno de la función de sleep a una variable, luego ejecutar los temporizadores y luego esperar la variable.

También ajusté su declaración de expect para el espía de tiempo de espera, ya que requiere dos argumentos. Finalmente, eliminé su expectativa de que el sleep se llama con la duración porque literalmente lo está haciendo en la prueba, por lo que no parece que valga la pena hacer esa afirmación.

 console.log = jest.fn(); jest.useFakeTimers(); test("calls sleep with correct argument and calls console.log", async () => { const NODE_ENV = "test"; const SLEEP_DURATION = "100"; process.env = { ...process.env, NODE_ENV, SLEEP_DURATION }; const timeoutSpy = jest.spyOn(global, "setTimeout"); const sleepFn = sleep(+SLEEP_DURATION); jest.runAllTimers(); // Now that we ran timers we can await the promise resolving await sleepFn; // timeout takes two arguments expect(timeoutSpy).toHaveBeenCalledWith( expect.any(Function), +SLEEP_DURATION ); expect(console.log).toHaveBeenCalledWith("sleep end"); });
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