• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

97
Views
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?

almost 3 years ago · Juan Pablo Isaza
1 answers
Answer question

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 }); }));
almost 3 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 Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error