2

我正在使用 istanbul(通过 grunt、jasmine 和 phantomJS)为我的单元测试生成代码覆盖率报告。我得到了我所说的误报,这些模块具有我正在测试的模块作为调用其方法的依赖项的模块,即

module1.jsmodule2.js作为依赖加载。module1 调用的单元测试module1.method,然后调用module2.method. 当我查看代码覆盖率报告module2.method时,即使没有对其进行测试,它也会以绿色突出显示。

这是我应该关注的事情,我该如何避免?

4

2 回答 2

2

我创建了这个 grunt 任务来帮助识别他们自己的测试套件未明确涵盖的文件

grunt.registerTask('missingSpecs', 'Missing specs list', function (env, limit) {
    var specs = getFileList(getSpecs(env)),
        src = getFileList(getSrc(env)),
        missingSpecs = [];

    for (var file in src) {
        if (specs.indexOf(src[file]) === -1) {
            missingSpecs.push(src[file]);
        }
    }
    if (missingSpecs.length) {
        console.log(
            '\n******************************************************************************************************\n' +
            '*** The following common js files aren\'t covered by any tests. They won\'t write themselves, y\'know ***\n' +
            '******************************************************************************************************\n'
            );
        missingSpecs.sort(function () {
            return Math.random() - 0.5;
        }).slice(0,limit).forEach(function (file) {
            console.log(file);
        });
    }

})

getFileList 使用 grunt.file.expand 和一些正则表达式来获取模块名称列表。

于 2013-07-11T12:00:10.697 回答
0

我也注意到了这一点,但我认为这是正确的行为。代码覆盖率仅意味着代码在测试期间执行。并不是说代码是断言的一部分。

于 2013-07-10T16:02:28.577 回答