【问题标题】:Meteor-coverage seems to show executed statements as not coveredMeteor-coverage 似乎将执行的语句显示为未覆盖
【发布时间】:2017-05-30 15:38:34
【问题描述】:

我在 Ubuntu 14.04 LTS 上使用流星覆盖包(版本 1.1.4)和 mocha(版本 2.4.5_6)和流星版本 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 次。但是,它们没有被标记为被覆盖,在我的报告中,声明覆盖的百分比反映了这一点。

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

谢谢!

解决方案后编辑

看来我现在可以正常工作了。 Codacy 上的百分比与我的 html 报告中的百分比相匹配。更仔细地查看 html 报告,似乎覆盖数字毕竟是正确的。只是向下钻取显示了奇怪的行为。因此,结论是它毕竟有效,但 Codacy 的第二意见向我证实了这一点。我的新方法是使用 spacejam 创建 lcov 覆盖率报告(请参阅下面 Ser 的回答)并将这些报告导出到 Codacy、Codecov 或 SonarQube 等外部服务。

感谢 Serut 的输入!

【问题讨论】:

    标签: meteor mocha.js code-coverage istanbul codacy


    【解决方案1】:

    我是meteor-coverage的作者。很高兴看到该软件包在您的应用程序上运行良好!

    首先,我认为您收集覆盖率和保存报告的方式没有得到优化:不要创建具有保存覆盖率功能的实用程序。您只需使用即可保存每个文件的覆盖率(假设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 等代码质量平台。我希望它能解决线路问题,这可能与 istanbul 及其 html 报告生成有关。

    【讨论】:

    • 嘿 Serut,谢谢您的回答!我尝试使用 spacejam 以您解释的方式运行测试。但是,这导致我的控制台中出现以下错误输出:=> Started proxy. => Started MongoDB. spacejam: meteor mongodb is ready spacejam: killing meteor spacejam: Unknown error with exit code 'null'. Exiting. 我试图在网上找到有关此的任何信息,但与此相关的所有问题似乎都与 Windows 支持有关,因为我在 Ubuntu 上开发我的应用程序,似乎不适用于我。你知道这个错误可能来自哪里吗?
    • 堆栈跟踪太短,无法让我了解发生了什么,它可能是您启动 spacejam 的方式(使用 meteor npm run <package.json script that uses spacejam>)或与您的设置相关的错误。检查this fork I've made of apollographql/meteor-starter-kit 以查看我为添加覆盖范围所做的更改。或者fill an issue,如果你想解决这个问题。
    • 好的,所以我设法让 spacejam 启动并运行。毕竟我必须使用https://github.com/serut/spacejam/tarball/windows-suppport-rc4 版本。能够使用您的 repo 中提供的 package.json 命令创建一个 lcov 文件,并能够将其发送给 Codacy 进行分析。不幸的是,百分比仍然相同,这意味着仍然必须错误地计算行数。不过,我还有一步,所以到目前为止谢谢你!我将继续尝试找出问题所在并保持更新此线程。如果您在此期间有任何其他建议,请告诉我!
    • 顺便说一句,它仍然以以下输出结束-------------------------------------------------- ---------------------RESULTS---------------------- PASSED: 32 FAILED: 0 SKIPPED: 0 TOTAL: 32 -------------------------------------------------- -------------------------------------------------- spacejam: phantomjs exited with code: 0 spacejam: killing meteor spacejam: Unknown error with exit code 'null'. Exiting. 它也在运行命令以生成实际覆盖率报告后执行此操作。
    • 看来我现在可以正常使用了。 Codacy 上的百分比与我的 html 报告中的百分比相匹配。更仔细地查看 html 报告,似乎覆盖数字毕竟是正确的。只是向下钻取显示了奇怪的行为。所以,结论是它毕竟有效,但 Codacy 的第二个意见向我证实了这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    相关资源
    最近更新 更多