流星覆盖似乎显示已执行的语句未被覆盖
Meteor-coverage seems to show executed statements as not covered
我在 Ubuntu 14.04 LTS 上使用 meteor-coverage 包(版本 1.1.4)和 mocha(版本 2.4.5_6)和 meteor 版本 1.4.4.1。我已经能够生成非常漂亮的测试覆盖率报告,但对于客户端测试来说似乎有些不对劲。为了将覆盖率数据发送到 localhost:3000/coverage,我创建了一个名为 sendCoverage()
的函数,我将其导入到我的 .tests.js 文件中:
export const sendCoverage = function sendCoverage() {
Meteor.sendCoverage(function(stats,err) {console.log(stats,err);});
};
我在一段 mocha 测试之后调用了这个函数:
after (function () {
sendCoverage();
});
现在,这会在我的 localhost:3000/coverage 页面中生成测试覆盖率报告,但它似乎没有正确显示覆盖率。例如,我看到一些语句已执行,但以红色突出显示并标记为未涵盖。例如:
这些语句似乎分别执行了 11 次和 12 次。然而,它们没有被标记为被覆盖,在我的报告中,声明覆盖率的百分比反映了这一点。
有谁知道我可能做错了什么and/or有客户端代码覆盖率和 meteor-coverage 包的经验吗?
谢谢!
Post-解决方案编辑
看来我现在已经可以使用了。 Codacy 上的百分比与我的 html 报告中的百分比相符。更仔细地查看 html 报告,似乎覆盖率数字毕竟是正确的。只是向下钻取显示出奇怪的行为。所以,结论是它毕竟有效,但 Codacy 的第二意见向我证实了这一点。我的新方法是使用 spacejam 创建 lcov 覆盖报告(请参阅下面 Ser 的回答)并将这些报告导出到外部服务,如 Codacy、Codecov 或 SonarQube。
感谢 Serut 的输入!
我是流星报道的作者。很高兴看到该软件包在您的应用程序上运行良好!
首先,我认为您收集覆盖率和保存报告的方式没有得到优化:不要创建具有保存覆盖率功能的实用程序。您只需使用即可保存每个文件的覆盖率(假设 Meteor.sendCoverage
始终存在于测试中)。
after (function () {
Meteor.sendCoverage(()=>{});
});
另一方面,您不应该为了节省覆盖率而在测试文件中编写任何代码。测试运行器可以像 I added on the spacejam fork. You can try to export the html
and the lcov
report using serut/spacejam 那样为您做这些。
我认为 lcov
格式比 html
报告更可靠。如果我看一些 coverage report of the client side code from meteor-coverage,一切看起来都很连贯。尝试将 lcov 文件发送到代码质量平台,如 Sonar、Codecov 或 Codacy。我希望它能解决线路问题,这可能与伊斯坦布尔及其 html 报告生成有关。
我在 Ubuntu 14.04 LTS 上使用 meteor-coverage 包(版本 1.1.4)和 mocha(版本 2.4.5_6)和 meteor 版本 1.4.4.1。我已经能够生成非常漂亮的测试覆盖率报告,但对于客户端测试来说似乎有些不对劲。为了将覆盖率数据发送到 localhost:3000/coverage,我创建了一个名为 sendCoverage()
的函数,我将其导入到我的 .tests.js 文件中:
export const sendCoverage = function sendCoverage() {
Meteor.sendCoverage(function(stats,err) {console.log(stats,err);});
};
我在一段 mocha 测试之后调用了这个函数:
after (function () {
sendCoverage();
});
现在,这会在我的 localhost:3000/coverage 页面中生成测试覆盖率报告,但它似乎没有正确显示覆盖率。例如,我看到一些语句已执行,但以红色突出显示并标记为未涵盖。例如:
这些语句似乎分别执行了 11 次和 12 次。然而,它们没有被标记为被覆盖,在我的报告中,声明覆盖率的百分比反映了这一点。
有谁知道我可能做错了什么and/or有客户端代码覆盖率和 meteor-coverage 包的经验吗?
谢谢!
Post-解决方案编辑
看来我现在已经可以使用了。 Codacy 上的百分比与我的 html 报告中的百分比相符。更仔细地查看 html 报告,似乎覆盖率数字毕竟是正确的。只是向下钻取显示出奇怪的行为。所以,结论是它毕竟有效,但 Codacy 的第二意见向我证实了这一点。我的新方法是使用 spacejam 创建 lcov 覆盖报告(请参阅下面 Ser 的回答)并将这些报告导出到外部服务,如 Codacy、Codecov 或 SonarQube。
感谢 Serut 的输入!
我是流星报道的作者。很高兴看到该软件包在您的应用程序上运行良好!
首先,我认为您收集覆盖率和保存报告的方式没有得到优化:不要创建具有保存覆盖率功能的实用程序。您只需使用即可保存每个文件的覆盖率(假设 Meteor.sendCoverage
始终存在于测试中)。
after (function () {
Meteor.sendCoverage(()=>{});
});
另一方面,您不应该为了节省覆盖率而在测试文件中编写任何代码。测试运行器可以像 I added on the spacejam fork. You can try to export the html
and the lcov
report using serut/spacejam 那样为您做这些。
我认为 lcov
格式比 html
报告更可靠。如果我看一些 coverage report of the client side code from meteor-coverage,一切看起来都很连贯。尝试将 lcov 文件发送到代码质量平台,如 Sonar、Codecov 或 Codacy。我希望它能解决线路问题,这可能与伊斯坦布尔及其 html 报告生成有关。