Jest Cheat Sheet - 快速参考指南,收录常用语法、命令与实践。
Jest is a delightful JavaScript testing framework maintained by Facebook. It is widely used for unit testing, integration testing, and even end-to-end testing in modern JavaScript and Node.js applications. Jest comes with a powerful set of features, including a built-in test runner, assertion library, mocking utilities, snapshot testing, and test coverage reporting.
This guide targets Jest v20 and gives a concise yet practical overview of how to use it effectively.
describe(): Used to group related test cases into a test suite.test() / it(): Define a single test case. it() is just a BDD-style alias for test().expect(): Assertion library that checks whether a value meets expectations.beforeEach() / afterEach(): Runs code before or after every test in a suite.beforeAll() / afterAll(): Runs setup/teardown code once before or after all tests..only / .skip: Focus or ignore specific tests/suites.setTimeout() and setInterval().async/await.npm install --save-dev jest babel-jest
Add this to your package.json:
"scripts": {
"test": "jest"
}
Run your tests:
npm test -- --watch
📖 See: Getting Started
describe('My work', () => {
test('works', () => {
expect(2).toEqual(2);
});
});
🔄 it() is an alias for test().
Use these for setup/teardown routines:
beforeEach(() => { ... });
afterEach(() => { ... });
beforeAll(() => { ... });
afterAll(() => { ... });
Focusing tests:
describe.only(...);
it.only(...); // or fit()
Skipping tests:
describe.skip(...);
it.skip(...); // or xit()
| Flag | Description |
|---|---|
--coverage | Show test coverage summary |
--detectOpenHandles | Detect unclosed handles (e.g., sockets) |
--runInBand | Run tests serially (useful for CI) |
expect(value).not.toBe(value);
expect(value).toEqual(value);
expect(value).toBeTruthy();
Note:
toEqualperforms deep equality.
expect(value).toMatchSnapshot();
expect(value).toMatchInlineSnapshot();
Inline snapshots require Prettier.
expect(fn).toThrow(error);
expect(fn).toThrowErrorMatchingSnapshot();
expect(value).toBeFalsy();
expect(value).toBeNull();
expect(value).toBeTruthy();
expect(value).toBeUndefined();
expect(value).toBeDefined();
expect(value).toBeCloseTo(number, digits);
expect(value).toBeGreaterThan(number);
expect(value).toBeLessThanOrEqual(number);
expect(value).toBeInstanceOf(Class);
expect(value).toMatchObject(obj);
expect(value).toHaveProperty('key', value);
expect(value).toContain(item);
expect(value).toHaveLength(number);
expect(value).toMatch(/pattern/);
expect.extend(customMatchers);
expect.any(Constructor);
expect.assertions(1);
test('resolves correctly', () => {
return somePromise().then(data => {
expect(data).toEqual(...);
});
});
test('awaits correctly', async () => {
const result = await asyncFunc();
expect(result).toBe(...);
});
📖 See: Jest Async Testing
it('renders correctly', () => {
const output = something();
expect(output).toMatchSnapshot();
});
For React components:
import renderer from 'react-test-renderer';
it('matches snapshot', () => {
const tree = renderer.create(<Component />).toJSON();
expect(tree).toMatchSnapshot();
});
jest.useFakeTimers();
it('delays call', () => {
jest.runOnlyPendingTimers();
jest.runAllTimers();
});
📖 See: Timer Mocks
const fn = jest.fn();
const squared = jest.fn(n => n * n);
expect(fn).toHaveBeenCalled();
expect(fn).toHaveBeenCalledTimes(2);
expect(fn).toHaveBeenCalledWith(arg1, arg2);
expect(fn).toHaveBeenCalledWith(expect.any(String));
expect(fn).toHaveBeenCalledWith(expect.arrayContaining([1, 2]));
const MyClass = jest.fn();
const a = new MyClass();
const b = new MyClass();
MyClass.mock.instances; // [a, b]
fn.mock.calls.length;
fn.mock.calls[0][0];
jest.fn().mockReturnValue('hello');
jest.fn().mockReturnValueOnce('hi');
const fn = jest
.fn()
.mockImplementationOnce(() => 1)
.mockImplementationOnce(() => 2);
This comprehensive guide helps you get started with Jest testing or use it like a pro. It pairs perfectly with the React Testing Library for a user-centric testing workflow.