Skip to content
On this page

Async functions

In JavaScript you very frequently work with promises and async functions. 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:

typescript
function delay(n: number): Promise<void> {
  return new Promise((resolve) => {
    setTimeout(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.

typescript
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.

Released under the MIT License.