流星覆盖似乎显示已执行的陈述未涵盖

时间:2017-05-30 15:38:34

标签: meteor mocha code-coverage istanbul codacy

我在Ubuntu 14.04 LTS上使用带有mocha(版本2.4.5_6)和meteor版本1.4.4.1的meteor-coverage软件包(版本1.1.4)。我已经能够生成非常漂亮的测试覆盖率报告,但似乎对于客户端测试有些不对劲。为了将覆盖数据发送到localhost:3000 / coverage,我创建了一个名为sendCoverage()的函数,我在 .tests.js 文件中导入该函数:

export const sendCoverage = function sendCoverage() {
    Meteor.sendCoverage(function(stats,err) {console.log(stats,err);});
};

我在一段摩卡测试后调用此函数:

after (function () {
    sendCoverage();
});

现在,这会在我的localhost:3000 / coverage页面中生成测试覆盖率报告,但好像它没有正确显示覆盖率。例如,我看到一些语句被执行,但是以红色突出显示并标记为未覆盖。例如:

coverage example

似乎语句分别执行了11次和12次。但是,它们没有被标记为被覆盖,在我的报告中,声明覆盖率的百分比反映了这一点。

有谁知道我可能做错了什么和/或有客户端代码覆盖和流星覆盖包的经验?

谢谢!

解决方案后修改

我现在似乎已经开始工作了。 Codacy上的百分比与我的HTML报告中的百分比相匹配。仔细观察HTML报告,看起来覆盖数字毕竟是正确的。只是向下钻取显示奇怪的行为。所以,结论是它毕竟有用,但是Codacy的第二个意见向我证实了这一点。我的新方法是使用spacejam创建lcov覆盖率报告(请参阅下面的Ser答案)并将其导出到Codacy,Codecov或SonarQube等外部服务。

感谢Serut的输入!

1 个答案:

答案 0 :(得分:1)

我是流星报道的作者。很高兴看到该程序包在您的应用程序上运行良好!

首先,我不认为您正在收集覆盖范围和保存报告的方式已经过优化:不要创建具有保存覆盖范围功能的utils。您可以使用(假设Meteor.sendCoverage始终存在于测试中)来保存每个文件的覆盖范围。

after (function () {
    Meteor.sendCoverage(()=>{});
});

另一方面,您不应在测试文件中编写任何代码以节省覆盖率。测试运行员可以像I added on the spacejam fork一样为您做到这一点。您可以尝试使用serut/spacejam导出htmllcov报告。

我认为lcov格式比html报告更可靠。如果我看一些coverage report of the client side code from meteor-coverage,一切看起来都很连贯。尝试将lcov文件发送到Sonar,Codecov或Codacy等代码质量平台。我希望它能解决线问题,这可能与伊斯坦布尔及其html报告生成有关。