使用Jest进行单元测试

Jest 是 facebook 开源的基于node.js的单元测试框架,Jest 的一个理念是提供一套完整集成的 “零配置” 测试体验。使用 Jest, 可以有效降低编写单元测试的难度。

安装及基本配置

使用yarn安装:

1
yarn add --dev jest

或npm安装:

1
npm install --save-dev jest

在package.json文件的scripts选项配置下面的测试命令:

1
2
3
4
5
{
"scripts": {
"test": "jest"
}
}

在项目根目录新建一个test文件夹,用来管理测试文件,然后在package.json文件里加入下面的配置项:

1
2
3
4
5
{
"jest": {
"testRegex": "/test/.*.test.js$"
}
}

其中,testRegex是匹配测试文件路径的正则表达式。

编写一个添加两个数字的假设函数的测试。首先,在src目录创建一个sum.js文件:

1
2
3
4
5
function sum(a, b) {
return a + b;
}

module.exports = sum;

然后,在test目录创建一个名为的文件sum.test.js。这将包含的实际测试代码:

1
2
3
4
5
const sum = require('../src/sum');

test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});

最后,运行yarn test或npm run test,将打印下面这个消息:

1
2
PASS  test/sum.test.js
✓ adds 1 + 2 to equal 3 (5ms)

使用Babel

如果需要使用Babel,可以通过yarn来安装所需的依赖:

1
yarn add --dev babel-jest @babel/core @babel/preset-env

或npm安装:

1
npm install --save-dev babel-jest @babel/core @babel/preset-env

在工程的根目录下创建一个babel.config.js文件用于配置与当前node版本兼容的Babel:

1
2
3
4
5
6
7
8
9
10
11
12
13
// babel.config.js
module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
node: 'current',
},
},
],
],
};

如果,项目已经配置过es6开发环境,只需要安装babel-jest即可。

使用ESLint检测

安装ESLint:

1
npm install eslint --save-dev

在eslint配置文件.eslintrc中加入以下代码:

1
2
3
"env": {
"jest": true
}

生成测试覆盖率报告

只需要在jest命令后加入 –coverage即可:

1
2
3
4
5
{
"scripts": {
"test": "jest --coverage"
}
}

生成的测试报告如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
PASS test/sum.test.js
✓ adds 1 + 2 to equal 3 (5ms)

----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
----------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
sum.js | 100 | 100 | 100 | 100 | |
----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 2.948s, estimated 3s
Ran all test suites.

附录

更多关于Jest的内容请移步官网:Jest文档