Normally when testing your code throwing exceptions is goes something like this: (examples in typescript with Jasmine)
function isTwo(num: number): number { if(num != 2) throw new Error("Yo! It's not number 2!!"); return num; } // ... inside describe block it("should throw an error", () => { const throwError = function() { isTwo(3) }; expect(throwError).toThrowError("Yo! It's not number2!!") }
We wrap our function in an anonymous function and pass it to the expectation. All is good and we move on with our day!
But what if our function is returning a promise! Aha, things can’t work the same.
Let’s use async / await to help us.
function isTwo(num: number): Promise<number> { new Promise(resolve, reject) { if(num != 2) reject("Yo! It's not number 2!!"); resolve(num); } } // ... inside describe block it("should throw an error", async () => { try { const throwError = isTwo(3); } catch(error) { expect(error.message).toBe(""Yo! It's not number 2!!"); } }