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

119
Visualizações
Cómo evitar el tiempo en una prueba cuando se espera una Promesa con setTimeout en Jasmine

Dado que tengo el siguiente código:

 public returnData(): Promise<any> { return new Promise((resolve) => { setTimeout(() => { resolve({ data: true, }); }, 2000); }); }

Ahora, actualmente mi prueba unitaria hace con éxito:

 it('should return data', async function () { const responseMock = { data: true, }; await expectAsync(component.returnData()).toBeResolvedTo(responseMock); });

Pero hay un problema obvio: la prueba tarda más de 2000ms, lo cual es inaceptable. Quiero poder probar esto sin necesidad de esperar el tiempo. He probado muchas soluciones diferentes, como las siguientes:

 it('should return data', async function () { jasmine.clock().install(); const responseMock = { data: true, }; setTimeout(() => { expectAsync(component.returnData()).toBeResolvedTo(responseMock); jasmine.clock().tick(2000); }, 2000); jasmine.clock().uninstall(); });

La prueba anterior pasó con gran sincronización, pero cuando cambio el valor de responseMock por cualquier otra cosa, todavía pasa, por lo que realmente no funciona...

¿Cuál es la clave para probar este caso específico, sin la necesidad de esperar el tiempo setTimeout?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

¿Por qué estás ejecutando las expectativas en un setTimeout ? Tal vez no necesitamos eso.

Prueba esto:

 it('should return data', async function () { jasmine.clock().install(); const responseMock = { data: true, }; // call the method that returns a promise and have a handle on its promise const promise = component.returnData(); // make 2 seconds pass in a fake way jasmine.clock().tick(2000); // await the promise const result = await promise; // assert the result expect(result).toEqual(responseMock); jasmine.clock().uninstall(); });

Veo que estás usando component. y lo más probable es que estés usando Angular. Si está usando Angular, uso fakeAsync/tick para el tiempo y las promesas.

Echa un vistazo a fakeAsync/tick aquí .

 // it('should return data', fakeAsync(() => { const responseMock = { data: true, }; // call the method that returns a promise and have a handle on its promise const promise = component.returnData(); // make 2000 pass in a fake way tick(2000); promise.then(result => { expect(result).toEqual(responseMock); expect(1).toBe(2); // delete this - make sure the test fails to know we made it here }); }));
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