为什么需要测试?
测试确保代码质量,防止 bug。Jest 是 Facebook 开发的测试框架,零配置,开箱即用。
安装
1
| npm install --save-dev jest
|
在 package.json 中添加:
1 2 3
| "scripts": { "test": "jest" }
|
基本测试
创建 sum.js:
1 2 3 4 5
| function sum(a, b) { return a + b; }
module.exports = sum;
|
创建 sum.test.js:
1 2 3 4 5
| const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => { expect(sum(1, 2)).toBe(3); });
|
运行 npm test。
匹配器 (Matchers)
toBe():严格相等
toEqual():对象相等
toBeTruthy():真值
toContain():包含
1 2 3 4 5
| test('object assignment', () => { const data = {one: 1}; data['two'] = 2; expect(data).toEqual({one: 1, two: 2}); });
|
测试异步代码
1 2 3 4 5 6 7 8 9 10
| function fetchData() { return new Promise((resolve) => { setTimeout(() => resolve('peanut butter'), 100); }); }
test('the data is peanut butter', async () => { const data = await fetchData(); expect(data).toBe('peanut butter'); });
|
设置和清理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| beforeEach(() => { });
afterEach(() => { });
beforeAll(() => { });
afterAll(() => { });
|
Mock 函数
模拟依赖。
1 2 3
| const mockCallback = jest.fn(x => 42 + x); mockCallback(1); expect(mockCallback).toHaveBeenCalledWith(1);
|
测试 React 组件
需要额外安装:
1
| npm install --save-dev @testing-library/react @testing-library/jest-dom
|
1 2 3 4 5 6 7 8
| import { render, screen } from '@testing-library/react'; import App from './App';
test('renders learn react link', () => { render(<App />); const linkElement = screen.getByText(/learn react/i); expect(linkElement).toBeInTheDocument(); });
|
配置
创建 jest.config.js:
1 2 3 4
| module.exports = { testEnvironment: 'jsdom', setupFilesAfterEnv: ['<rootDir>/setupTests.js'] };
|
总结
Jest 让测试变得简单。从单元测试开始,逐步覆盖更多场景。测试是代码质量的保障。