【发布时间】:2013-05-14 01:12:42
【问题描述】:
我正在使用 Mocha 来测试我的 NodeJS 应用程序。我无法弄清楚如何使用它的代码覆盖率功能。我试着用谷歌搜索它,但没有找到任何合适的教程。请帮忙。
【问题讨论】:
标签: node.js unit-testing code-coverage mocha.js
我正在使用 Mocha 来测试我的 NodeJS 应用程序。我无法弄清楚如何使用它的代码覆盖率功能。我试着用谷歌搜索它,但没有找到任何合适的教程。请帮忙。
【问题讨论】:
标签: node.js unit-testing code-coverage mocha.js
你需要一个额外的库来覆盖代码,你会被istanbul 的强大和简单所震撼。在通过 mocha 测试后尝试以下操作:
npm install nyc
现在,只需将命令 nyc 放在现有测试命令的前面,例如:
{
"scripts": {
"test": "nyc mocha"
}
}
【讨论】:
istanbul cover node_modules/mocha/bin/_mocha。
istanbul.cmd cover C:\Users\{UserName}\AppData\Roaming\npm\node_modules\mocha\bin\_mocha
$(npm bin) 是./node_modules/.bin/ 的规范快捷方式,istanbul/lib/cli.js 在 bin 文件夹中别名为 istanbul。所以这里有一个更短的命令:$(npm bin)/istanbul cover $(npm bin)/_mocha -- --ui bdd -R spec -t 5000
istanbul cover node_modules/mocha/bin/_mocha -- -R spec
现在(2021)使用istanbul 的首选方式是通过其“最先进的命令行界面”nyc。
首先,将其安装到您的项目中
npm i nyc --save-dev
然后,如果您有一个基于 npm 的项目,只需更改您的 package.json 文件的 scripts 对象内的测试脚本以执行您的 mocha 测试的代码覆盖率:
{
"scripts": {
"test": "nyc --reporter=text mocha"
}
}
现在运行你的测试
npm test
您将在控制台中看到这样的表格,就在您的测试输出之后:
随便用
nyc --reporter=html
而不是text。现在它将在./coverage/index.html 中生成一个报告。
伊斯坦布尔支持多种报告格式。只需查看其reports library 即可找到对您最有用的。
只需为您想要的每种格式添加一个--reporter=REPORTER_NAME 选项。
例如,与
nyc --reporter=html --reporter=text
您将拥有控制台和 html 报告。
只需在您的 package.json 中添加另一个脚本,然后将 test 脚本仅保留您的测试运行程序(例如 mocha):
{
"scripts": {
"test": "mocha",
"test-with-coverage": "nyc --reporter=text mocha"
}
}
现在运行这个自定义脚本
npm run test-with-coverage
以代码覆盖率运行测试。
如果总代码覆盖率低于 90%,则失败:
nyc --check-coverage --lines 90
如果至少一个文件的代码覆盖率低于 90%,则失败:
nyc --check-coverage --lines 90 --per-file
【讨论】:
--reporter=html,但 html 文件始终为空,没有显示未覆盖的块或覆盖的百分比等只是表的标题
Blanket.js 也很完美。
npm install --save-dev blanket
在你的 test/tests.js 前面
require('blanket')({
pattern: function (filename) {
return !/node_modules/.test(filename);
}
});
运行mocha -R html-cov > coverage.html
【讨论】: