Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

436
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda