Skip to main content

Async functions

In JavaScript you very frequently work with promises and async code. Here's how to deal with them in earl.

Successful promises

We don't expose any helpers to work with promises that should successfully resolve. Instead, we encourage you to use async/await syntax:

function delay(n: number): Promise<void> {
return new Promise((resolve) => {
setInterval(resolve, n)
})
}

async function longTermTask(): Promise<number> {
await delay(1000)
return 42
}

expect(await longTermTask()).toEqual(42)

Note that if you forget await TypeScript will warn you about types mismatch because toEqual actual/expected values won't match.

Rejected promises

For rejected promises we expose simple toBeRejected helper.

async function longTermTask(): Promise<number> {
throw new Error('Unexpected error')
}

await expect(longTermTask()).toBeRejected('Unexpected error')

In this case we need await before expect because whole assertion becomes async. To avoid mistakes enable no-floating-promises eslint rule (it's part of TypeSTRICT).

Other than that toBeRejected works exactly the same as toThrow so you can take a look at our testing errors guide.