Ich schreibe einen asynchronen Test, der erwartet, dass die asynchrone Funktion wie folgt ausgelöst wird:
it("expects to have failed", async () => {
let getBadResults = async () => {
await failingAsyncTest()
}
expect(await getBadResults()).toThrow()
})
Aber der Scherz scheitert einfach, anstatt den Test zu bestehen:
FAIL src/failing-test.spec.js
● expects to have failed
Failed: I should fail!
Wenn ich den Test so umschreibe, sieht er folgendermaßen aus:
expect(async () => {
await failingAsyncTest()
}).toThrow()
Ich erhalte diesen Fehler anstelle eines bestandenen Tests:
expect(function).toThrow(undefined)
Expected the function to throw an error.
But it didn't throw anything.
Antworten:
Sie können Ihre asynchrone Funktion folgendermaßen testen:
Die Zeichenfolge "Ich sollte versagen" stimmt mit jedem Teil des ausgelösten Fehlers überein.
quelle
await expect(failingAsyncTest()).rejects.toHaveProperty('message', 'I should fail');
failingAsyncTest
die richtige Art von Fehler aufgetreten ist. Es ist offensichtlicher, wenn Sie die Implementierung von ändernfailingAsyncTest
, um den falschen Fehler anstelle des richtigen auszulösen. (mit Jest 23.6)await expect(failingAsyncTest()).rejects.toThrow(/fail/);
Ich möchte dies nur ergänzen und sagen, dass die Funktion, die Sie testen, ein tatsächliches Fehlerobjekt auslösen muss
throw new Error(...)
. Jest scheint nicht zu erkennen, ob Sie nur einen Ausdruck wie werfenthrow 'An error occurred!'
.quelle