如何让伊斯坦布尔为我的所有源代码生成报道?

See*_*eer 19 mocha.js node.js sinon chai istanbul

目前伊斯坦布尔只为我的测试中使用的文件生成了覆盖范围,这是可以的,但似乎无法实现覆盖的目的.

我没有Istanbul配置,并通过npm test以下脚本字符串调用它:

$ istanbul cover _mocha -- -R dot --check-leaks --recursive test/

有没有办法为我的所有源代码生成报道?

See*_*eer 18

找到了答案,我觉得我很幸运,我选择的目录结构允许我使用这个选项,但我的测试命令现在是:

$ istanbul --include-all-sources cover _mocha -- -R dot --recursive test/

--include-all-sources是重要的部分.

  • 只是想通了。您需要将--include-all-sources与--root结合使用。对于我的代码,它只是`--include-all-sources --root。/ src`。我在这里找到此命令:https://github.com/gotwarlost/istanbul/issues/112#issuecomment-281078341 (2认同)

小智 5

伊斯坦布尔建议使用nyc来检查代码覆盖率。它建议这样的方法:

nyc mocha
Run Code Online (Sandbox Code Playgroud)

运行此命令后,我们将获得覆盖率报告。但是有两个陷阱。

首先,默认情况下mocha是在folder中寻找测试test。为了覆盖它,我们必须在文件中设置自己的路径,mocha.opts如下所示:

nyc mocha --opts ./mocha.opts
Run Code Online (Sandbox Code Playgroud)

mocha.opts包含这样的代码,例如:

spec/unit/back-end/**/*.spec.js
Run Code Online (Sandbox Code Playgroud)

另一个问题是,默认情况下nyc仅检查所需文件的覆盖范围,这就是您的问题所在。解决方案是为设置两个选项nyc(我将测试作为npm脚本运行,所以我在package.json中设置了选项)。这是代码:

"nyc": {
  "all": true,
  "include": [
    "routes/*.js",
    "routes/**/*.js",
    "models/*.js"
  ]
},
"scripts": {
  "mocha": "nyc mocha --opts ./mocha.opts",
}
Run Code Online (Sandbox Code Playgroud)

实现此目标的另一种方法是将not设置为includeexclude以便从覆盖范围中检查不适当的文件。这很奇怪,但是唯一的选项all不起作用,它是必需的includeexclude选项。您可以通过获得有关nyc选项的更多信息nyc --help

PS:我不了解nyc,也不了解, mocha我只是基于我自己的经验。