Tags: jest, vitest, testing, matchers, mocks, spies, snapshot, coverage, javascript Last updated: 2026-06-26

Jest / Vitest Cheatsheet

Quick Reference

ConceptJestVitest
Test runnerjestvitest
Watch modejest --watchvitest --watch
Coveragejest --coveragevitest --coverage
Expectexpect(x).toBe(y)Same
Mockjest.fn()vi.fn()
Spyjest.spyOn(obj, 'm')vi.spyOn(obj, 'm')
Snapshotexpect(t).toMatchSnapshot()Same

Test Structure

import { describe, it, expect, beforeAll } from "vitest";

describe("Calculator", () => {
  beforeAll(() => { /* setup */ });

  it("adds two numbers", () => {
    expect(1 + 1).toBe(2);
  });

  it.each([[1, 1, 2], [2, 3, 5]])(
    "%i + %i = %i", (a, b, exp) => {
      expect(a + b).toBe(exp);
    });
});

Matchers

expect(x).toBe(y);              // strict (===)
expect(x).toEqual(y);           // deep equality
expect(x).toBeNull();
expect(x).toBeGreaterThan(3);
expect(str).toMatch(/regex/);
expect(arr).toContain("item");
expect(obj).toHaveProperty("key", value);
expect(() => fn()).toThrow("msg");
await expect(p).resolves.toBe(v);
await expect(p).rejects.toThrow();

Mocks & Spies

import { vi } from "vitest";

const mockFn = vi.fn();
mockFn.mockReturnValue(42);
mockFn.mockResolvedValue({ id: 1 });

expect(mockFn).toHaveBeenCalled();
expect(mockFn).toHaveBeenCalledWith(42);
expect(mockFn).toHaveBeenCalledTimes(2);

const spy = vi.spyOn(console, "log");
console.log("hello");
expect(spy).toHaveBeenCalledWith("hello");
spy.mockRestore();

vi.mock("./api", () => ({
  fetchUser: vi.fn().mockResolvedValue({ name: "Max" }),
}));

vi.clearAllMocks();
vi.resetAllMocks();
vi.restoreAllMocks();

Snapshot Testing

expect(tree).toMatchSnapshot();
expect(tree).toMatchSnapshot("named");
expect(result).toMatchInlineSnapshot(`"expected"`);
// Update: --update or -u flag

Coverage

// vitest.config.ts
export default defineConfig({
  test: {
    coverage: {
      enabled: true,
      provider: "v8",
      reporter: ["text", "lcov", "html"],
      thresholds: {
        lines: 80,
        functions: 80,
        branches: 75,
        statements: 80,
      },
    },
  },
});

Timer Mocks

vi.useFakeTimers();
const fn = vi.fn();
setTimeout(fn, 5000);
vi.advanceTimersByTime(5000);
expect(fn).toHaveBeenCalled();
vi.useRealTimers();

Tips