Mocha的代码覆盖率

时间:2013-05-19 09:35:20

标签: node.js unit-testing code-coverage mocha

我正在使用Mocha来测试我的NodeJS应用程序。我无法弄清楚如何使用其代码覆盖功能。我试过谷歌搜索但没有找到任何适当的教程。请帮忙。

3 个答案:

答案 0 :(得分:366)

你需要一个额外的库来代码覆盖,你会被强大而简单的istanbul所震撼。在通过mocha测试后,请尝试以下操作:

npm install nyc

现在,只需将命令nyc放在现有测试命令的前面,例如:

{
  "scripts": {
    "test": "nyc mocha"
  }
}

答案 1 :(得分:97)

现在( 2019 ),使用istanbul的首选方式是通过其"最先进的命令行界面" {{ 3}}

设置

首先,使用

将其安装在项目中
npm i nyc --save-dev

然后,如果您有基于npm的项目,只需更改nyc文件的scripts对象内的测试脚本,即可执行package.json测试的代码覆盖率:

{
  "scripts": {
    "test": "nyc --reporter=text mocha"
  }
}

运行

现在运行测试

npm test

你将在你的测试输出之后在控制台中看到这样的表:

mocha

定制

Html报告

只需使用

nyc --reporter=html

而不是text。现在它将在./coverage/index.html内生成报告。

报告格式

伊斯坦布尔支持各种报告格式。只需查看其Istanbul Nyc Mocha code coverage即可找到对您最有用的内容。 只需为您想要的每种格式添加--reporter=REPORTER_NAME选项即可。 例如,使用

nyc --reporter=html --reporter=text

你将同时拥有控制台和html报告。

不要使用npm test

进行覆盖

只需在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

答案 2 :(得分:19)

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