Jest Testing Guide

Essential Jest testing patterns and matchers.

Installation & Setup

Install Jest
npm install --save-dev jest

Add to package.json
"scripts": {
  "test": "jest",
  "test:watch": "jest --watch",
  "test:coverage": "jest --coverage"
}

Run tests
npm test

Basic Test Structure

Simple test
test(adds 1 + 2 to equal 3, () => {
  expect(1 + 2).toBe(3);
});

Describe block
describe(Calculator, () => {
  test(addition works, () => {
    expect(add(2, 3)).toBe(5);
  });
});

Test aliases
it(works, () => {}) // same as test

Common Matchers

Equality
expect(value).toBe(5) // strict equality
expect(obj).toEqual({ a: 1 }) // deep equality

Truthiness
expect(value).toBeTruthy()
expect(value).toBeFalsy()
expect(value).toBeNull()
expect(value).toBeUndefined()

Numbers
expect(value).toBeGreaterThan(3)
expect(value).toBeLessThan(10)
expect(value).toBeCloseTo(0.3)

Strings
expect(str).toMatch(/pattern/)
expect(str).toContain(substring)

Arrays
expect(arr).toContain(item)
expect(arr).toHaveLength(3)

Async Testing

Promises
test(async test, () => {
  return fetchData().then(data => {
    expect(data).toBe(result);
  });
});

Async/Await
test(async test, async () => {
  const data = await fetchData();
  expect(data).toBe(result);
});

Resolve/Reject
await expect(promise).resolves.toBe(value);
await expect(promise).rejects.toThrow(error);