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

120
Vistas
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 Respuestas
Responde la pregunta

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 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