使用Mocha进行代码覆盖

我正在使用Mocha测试我的NodeJS应用程序。我不知道如何使用它的代码覆盖功能。我试着在谷歌上搜索,但没有找到任何合适的教程。请帮助。

181659 次浏览

你需要一个额外的库来覆盖代码,你会被伊斯坦布尔的强大和简单所震撼。摩卡测试通过后,试试下面的方法:

npm install nyc

现在,简单地把命令nyc放在你现有的test命令前面,例如:

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

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

现在(2022)使用伊斯坦布尔的首选方式是通过它的“最新的命令行界面”; 纽约

设置

首先,将其安装在项目中

npm i nyc --save-dev

然后,如果你有一个基于npm的项目,只需在你的package.json文件的scripts对象中更改测试脚本,以执行你的摩卡测试的代码覆盖:

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

运行

现在运行测试

npm test

在测试输出之后,你会在控制台中看到一个这样的表:

伊斯坦布尔纽约市摩卡代码覆盖范围

定制

Html报告

只使用

nyc --reporter=html

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

报告格式

Istanbul支持多种报表格式。只要看看它的报告库就能找到对你最有用的。 只要为你想要的每一种格式添加一个--reporter=REPORTER_NAME选项。 例如,

nyc --reporter=html --reporter=text

您将同时拥有控制台和HTML报告。

不要用npm测试运行覆盖

只需要在你的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

如果您正在使用ESM模块,则接受的答案(nyc)将不起作用。

C8似乎是目前最好的解决方案,它利用了内置的NodeJS功能和伊斯坦布尔(像nyc,并共享相同的配置文件)。

npm install -g c8
c8 mocha

它将使用.nycrc进行配置。我使用的示例配置是:

{
"all": true,
"exclude": ["test"],
"output": "reports",
"reporter" : [
"html",
"text"
]
}

(注:我是通过另一个问题https://stackoverflow.com/a/69846825/1949430的答案指向c8的)