因为AVA重新处理了测试文件,所以你不能使用 istanbul 来做代码覆盖率,但你可以使用 nyc来完成,它是支持子进程的istanbul。

安装

1
npm install nyc --save-dev

因为nyc运行之后会生成测试覆盖率的结果,会在项目目录下生成.nyc_output和coverage文件夹。
这两个文件夹不需要版本管理,所以加到.gitignore文件中.

使用

使用nyc来测试覆盖率很方便,只需要在测试命令前加上nyc即可。所以和ava配合使用的package.json的配置如下:

1
2
3
4
5
{
"scripts": {
"test": "nyc ava -v"
}
}

测试报告

NYC 在.nyc_ouput文件夹中为每个进程创建一个json的覆盖率文件。
把这些文件组合成一个可阅读的 HTML报告,可以通过下面的方法来做:

1
$ ./node_modules/.bin/nyc report --reporter=html

或者,使用 npm 脚本来代替打印命令行:

1
2
3
4
5
{
"scripts": {
"report": "nyc report --reporter=html"
}
}

这样会在coverage文件夹中输出一个 HTML 文件。

使用小结

nyc ava只会在输出窗口输出覆盖率结果,如下:

1
2
3
4
5
6
----------|----------|----------|----------|----------|----------------|
File | % Stmts | % Branch | % Funcs | % Lines |Uncovered Lines |
----------|----------|----------|----------|----------|----------------|
All files | 100 | 100 | 100 | 100 | |
add.js | 100 | 100 | 100 | 100 | |
----------|----------|----------|----------|----------|----------------|

要生成html的覆盖率结果,需要使用nyc report命令来生成html的结果。

1
nyc reprot --reporter=html

这样就会在coverage下生成html的覆盖率就结果。用浏览器打开即可看到各个文件的覆盖率。

所以常用的package.json中的配置如下:

1
2
3
4
5
6
"scripts": {
"test": "ava -v",
"cov": "nyc report --report",
"test:nyc": "nyc ava -v",
"test:cov": "nyc ava -v && npm run cov"
}

常用于以下的集中场景:

1
2
3
4
5
6
7
8
9
10
11
12
- npm run test
用于直接运行测试,但不跑覆盖率检查。
- npm run test file
来对具体的文件测试。
- npm run test:cov
全部文件的测试及覆盖率检查
- 某个文件的测试及覆盖率检查
npm run test:nyc file 测试文件并生成覆盖率数据
npm run cov 将数据文件输出html文件