Estoy escribiendo una prueba asíncrona que espera que la función asíncrona se arroje así:
it("expects to have failed", async () => { let getBadResults = async () => { await failingAsyncTest() } expect(await getBadResults()).toThrow() })Pero broma es simplemente fallar en lugar de pasar la prueba:
FAIL src/failing-test.spec.js ● expects to have failed Failed: I should fail!Si reescribo la prueba para que se vea así:
expect(async () => { await failingAsyncTest() }).toThrow()Recibo este error en lugar de pasar la prueba:
expect(function).toThrow(undefined) Expected the function to throw an error. But it didn't throw anything.Puede probar su función asíncrona de esta manera:
it('should test async errors', async () => { await expect(failingAsyncTest()) .rejects .toThrow('I should fail'); });La cadena 'Debería fallar' coincidirá con cualquier parte del error arrojado.
Me gustaría agregar a esto y decir que la función que está probando debe arrojar un objeto Error real throw new Error(...) . Jest no parece reconocer si lanzas una expresión como throw 'An error occurred!' .
await expect(async () => { await someAsyncFunction(someParams); }).rejects.toThrowError("Some error message");Debemos envolver el código en una función para detectar el error. Aquí esperamos que el mensaje de error lanzado por someAsyncFunction sea igual a "Algún mensaje de error". También podemos llamar al controlador de excepciones
await expect(async () => { await someAsyncFunction(someParams); }).rejects.toThrowError(new InvalidArgumentError("Some error message"));