Jest Async Testing

Testing asynchronous code with Jest.

Promises

Return promise
test("async test", () => {
  return fetchData().then(data => {
    expect(data).toBe("value");
  });
});

Using resolves
test("async test", () => {
  return expect(fetchData()).resolves.toBe("value");
});

Using rejects
test("error test", () => {
  return expect(fetchData()).rejects.toThrow();
});

Async/Await

Basic async test
test("async test", async () => {
  const data = await fetchData();
  expect(data).toBe("value");
});

Error handling
test("error test", async () => {
  expect.assertions(1);
  try {
    await fetchData();
  } catch (e) {
    expect(e).toMatch("error");
  }
});

Callbacks

Using done callback
test("callback test", done => {
  function callback(data) {
    expect(data).toBe("value");
    done();
  }
  fetchData(callback);
});

Error with done
test("error test", done => {
  fetchData((err, data) => {
    expect(err).toBeNull();
    done();
  });
});

Setup & Teardown

Before/After each
beforeEach(() => {
  initializeDatabase();
});

afterEach(() => {
  clearDatabase();
});

Before/After all
beforeAll(() => {
  return setupDatabase();
});

afterAll(() => {
  return teardownDatabase();
});