349

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

4

4 回答 4

485

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

npm install nyc

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

{
  "scripts": {
    "test": "nyc mocha"
  }
}
于 2013-05-19T12:51:01.463 回答
211

现在(2022 年)使用伊斯坦布尔的首选方式是通过其“最先进的命令行界面” nyc

设置

首先,将其安装在您的项目中

npm i nyc --save-dev

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

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

现在运行你的测试

npm test

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

伊斯坦布尔纽约摩卡咖啡代码覆盖率

定制

html报告

只需使用

nyc --reporter=html

而不是text. 现在它会在里面产生一个报告./coverage/index.html

报告格式

伊斯坦布尔支持多种报告格式。只需查看其报告库即可找到对您最有用的。只需--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
于 2017-07-07T12:56:29.507 回答
20

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

于 2014-04-01T12:32:02.103 回答
1

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

C8似乎是现在最好的解决方案,它利用内置的 NodeJS 功能并利用 istanbul(如 nyc,并共享相同的配置文件)。

npm install -g c8
c8 mocha

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

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

(注意:我被另一个问题的答案指向 c8 https://stackoverflow.com/a/69846825/1949430

于 2022-01-08T03:43:56.323 回答