← Cheatsheets
Tags: jest, vitest, testing, matchers, mocks, spies, snapshot,
coverage, javascript
Last updated: 2026-06-26
Jest / Vitest Cheatsheet
Quick Reference
| Concept | Jest | Vitest |
| Test runner | jest | vitest |
| Watch mode | jest --watch | vitest --watch |
| Coverage | jest --coverage | vitest --coverage |
| Expect | expect(x).toBe(y) | Same |
| Mock | jest.fn() | vi.fn() |
| Spy | jest.spyOn(obj, 'm') | vi.spyOn(obj, 'm') |
| Snapshot | expect(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
- Prefer
toEqual over
toBe for objects/arrays.
- Use
it.each for table-driven
tests.
- Always
mockRestore() spies in
afterEach.
- Use
--watch mode during
development.
- Coverage thresholds in CI prevent
regressions.