0%

前端测试框架 Jest 使用

为什么需要测试?

测试确保代码质量,防止 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', // DOM 测试环境
setupFilesAfterEnv: ['<rootDir>/setupTests.js']
};

总结

Jest 让测试变得简单。从单元测试开始,逐步覆盖更多场景。测试是代码质量的保障。