备注
这是 code-coverage.md 的简体中文翻译。这个链接 用来查看本翻译与 AVA 的 master 分支是否有差别(如果你没有看到code-coverage.md
发生变化,那就意味着这份翻译文档是最新的)。
翻译:Español, Français, Italiano, 日本語, Português, Русский, 简体中文
因为 AVA重新处理了测试文件,所以你不能使用 istanbul
来做代码覆盖率,但你可以使用 nyc
来完成,它是支持子进程的 istanbul
。
首先安装 NYC:
$ npm install nyc --save-dev
然后添加.nyc_output
和coverage
文件夹到你的.gitignore
文件。
.gitignore
:
node_modules
coverage
.nyc_output
使用 NYC 很简单就可以提供使用 ES5 来写的生产代码的覆盖率,只需要在测试脚本前面加上nyc
:
{
"scripts": {
"test": "nyc ava"
}
}
就是这样!
如果你想要创建 HTML 覆盖率报告,或者上传覆盖率数据到 Coveralls,你应该跳过下面的那些章节。
使用 Babel 来转换生产代码有点复杂,这里我们把它分成几个步骤。
首先,我们需要一个 Babel 配置,下面是一个例子,你可以修改它以适应你的需要。
package.json
:
{
"babel": {
"presets": ["es2015"],
"plugins": ["transform-runtime"],
"ignore": "test.js",
"env": {
"development": {
"sourceMaps": "inline"
}
}
}
}
例子中有 2 点比较重要:
-
我们忽略测试文件,因为 AVA 已经为你做了转换处理了。
-
我们为开发环境指定
inline
(内联)原生映射,为了正确的生成覆盖率这个很重要,使用 Babel 配置中的env
属性可以让我们在生产构建中取消原生映射。
因为你可能不希望在生产代码中inline
原生映射,你需要在构建脚本中指定一个可代替的环境变量:
package.json
{
"scripts": {
"build": "BABEL_ENV=production babel --out-dir=dist index.js"
}
}
警告:
BABEL_ENV=production
在 Windows 中不可用,你必须使用set
关键字(set BABEL_ENV=production
),如果是跨平台构建,请检查cross-env
。
注意,构建脚本中 AVA 的部分真的很少,它只是一个如何使用 Babel 的env
配置来操作你的配置以兼容 AVA 的示例。
要使用 Babel require 钩子,请在package.json
中的 AVA 配置里将require
属性设置为babel-core/register
。
{
"ava": {
"require": ["babel-core/register"]
}
}
注意:你也可以在命令行里设置 require 钩子:ava --require=babel-core/register
。尽管如此,配置在package.json
里面可以让你不用重复地写标志。
结合上面的步骤,你的package.json
最后可能是这个样子:
{
"scripts": {
"test": "nyc ava",
"build": "BABEL_ENV=production babel --out-dir=dist index.js"
},
"babel": {
"presets": ["es2015"],
"plugins": ["transform-runtime"],
"ignore": "test.js",
"env": {
"development": {
"sourceMaps": "inline"
}
}
},
"ava": {
"require": ["babel-core/register"]
}
}
NYC 在.nyc_ouput
文件夹中为每个进程创建一个json
的覆盖率文件。
把这些文件组合成一个可阅读的 HTML 报告,可以通过下面的方法来做:
$ ./node_modules/.bin/nyc report --reporter=html
或者,使用 npm 脚本来代替打印命令行:
{
"scripts": {
"report": "nyc report --reporter=html"
}
}
这样会在coverage
文件夹中输出一个 HTML 文件。
首先,你需要登录 coveralls.io 并激活你的项目库。
一旦完成,添加 coveralls
到开发依赖库:
$ npm install coveralls --save-dev
然后添加下面的代码到你的.travis.yml
:
after_success:
- './node_modules/.bin/nyc report --reporter=text-lcov | ./node_modules/.bin/coveralls'
你的覆盖率报告将在你的 Travis 完成后很快地出现在 coveralls 上面。