Code Reference

Async

Jest · Reference cheat sheet

Async

Jest · Reference cheat sheet


📋 Overview

Jest supports promises, async/await, and callbacks (done). Prefer returning/awaiting promises; use .resolves / .rejects matchers for clarity.

🔧 Core concepts

StylePattern
async/awaitawait inside test
Promise returnreturn fetch().then(...)
resolves/rejectsawait expect(p).resolves.toBe(...)
doneLegacy callbacks — avoid if possible
Fake timersInteract carefully with promises

Unhandled rejections fail the test when properly awaited.

💡 Examples

async/await:

test('loads user', async () => {
  const user = await api.getUser(1);
  expect(user.id).toBe(1);
});

resolves / rejects:

await expect(api.getUser(1)).resolves.toMatchObject({ id: 1 });
await expect(api.getUser(-1)).rejects.toThrow(/not found/);
await expect(api.getUser(-1)).rejects.toMatchObject({ status: 404 });

Promise return (no async):

test('ok', () => {
  return api.ping().then((r) => expect(r).toBe('pong'));
});

Timeouts:

test('slow', async () => {
  await longJob();
}, 15_000);

Concurrent (Jest 29+):

test.concurrent('a', async () => { /* ... */ });
test.concurrent('b', async () => { /* ... */ });

⚠️ Pitfalls

  • Missing await / return → false green tests.
  • Mixing done with promises incorrectly.
  • Asserting before microtasks flush — await or await Promise.resolve().
  • Fake timers + real promises deadlocks without advanceTimers.
  • Swallowing errors in try/catch without rethrow/expect.

On this page