目前伊斯坦布尔只为我的测试中使用的文件生成报道,这是可以的,但似乎无法实现覆盖的目的。
我没有伊斯坦布尔配置,我使用以下脚本字符串通过npm test
调用它:
$ istanbul cover _mocha -- -R dot --check-leaks --recursive test/
有没有办法为我的所有源代码生成报道?
答案 0 :(得分:17)
找到答案,我认为我很幸运,我选择的目录结构允许我使用此选项,但我的测试命令现在是:
$ istanbul --include-all-sources cover _mocha -- -R dot --recursive test/
--include-all-sources
是重要的一部分。
答案 1 :(得分:4)
伊斯坦布尔建议使用nyc来检查代码覆盖率。它建议采用这样的方法:
nyc mocha
运行此命令后,我们将获得覆盖率报告。但是有一些陷阱。
首先,默认mocha
正在寻找文件夹test
中的测试。为了覆盖它,我们必须在文件mocha.opts
中设置我们自己的路径,如下所示:
nyc mocha --opts ./mocha.opts
mocha.opts
包含此类代码,例如:
spec/unit/back-end/**/*.spec.js
另一个问题是,默认情况下nyc
只检查所需文件的覆盖范围,这就是您的问题。解决方案是为nyc
设置两个选项(我将测试作为npm脚本运行,因此我在package.json中设置选项)。这是代码:
"nyc": {
"all": true,
"include": [
"routes/*.js",
"routes/**/*.js",
"models/*.js"
]
},
"scripts": {
"mocha": "nyc mocha --opts ./mocha.opts",
}
实现它的另一种方法是不设置include
,而是设置exclude
选项,以便从覆盖检查中排除不适当的文件。这很奇怪,但唯一选项all
不起作用,它需要include
或exclude
个选项。您可以通过nyc
获取有关nyc --help
选项的更多信息。
P.S。我不知道nyc
和mocha
,我只是基于自己的经验。
答案 2 :(得分:0)
要生成所有文件的覆盖率,请在package.json中添加以下内容
“ istanbulCoverage”:“ nyc --reporter = lcov --reporter = text-lcov --all -x \“ ./ node_modules / \” -x \“ ./ coverage / \” check-coverage-功能90 npm运行测试“
此处-all 标志将提取项目中的所有文件。如果您要排除特定的文件或文件夹,则可以使用 -x 选项。
除此之外,如果要为应用程序指定覆盖率,请使用 check-coverage 选项指定阈值。就我而言,我已指定函数具有90%的覆盖率阈值。否则,覆盖率报告生成将失败。(生成覆盖率报告后,我正在运行我的业力测试)。
希望这会有所帮助:)
答案 3 :(得分:0)
就我而言,--include-all-sources
对我不起作用。非require
-d的文件仍被排除在最终覆盖率报告之外。
最终,我在istanbul
GitHub上遇到了this issue,维护者说:
是的,这是预期的行为。伊斯坦布尔通过钩住require来工作,因此,如果文件从不需要-d,就好像它不存在一样。
我发现的唯一安全解决方案是手动require
我要包含在覆盖率报告中的所有文件。我与其他测试脚本一起创建了文件include-all.test.js
,并添加了以下代码:
var glob = require( 'glob' )
var path = require( 'path' );
glob.sync( './path/to/js/code/*.js' ).forEach( function( file ) {
// we don't care about errors here, we just want to require the file
try {
require( path.resolve( file ) );
} catch(e) {}
});
这将绝对确保您的未经测试的文件包含在istanbul
覆盖率报告中。