Rails 中的工作服代码覆盖率具有误导性

Coveralls code coverage in Rails is misleading

我们目前正在使用 Coveralls 来覆盖我们的 Rails 项目的代码。它给我们的覆盖率结果真的不可靠。我曾多次发现 class 没有规范的东西,为它们编写规范,然后看到覆盖率实际上下降了。这是因为 Coveralls 仅检查 class 由您的规格加载的内容。因此,如果 class 没有规范,它就会被排除在覆盖率统计之外。这显然不理想。有没有办法解决这种行为?我正在努力推动我的团队更加重视测试,但当这会造成一种虚假的安全感时,这很难做到。

我看到 Coveralls(以及类似的服务 Codecov)中覆盖率统计数据不可靠的两个原因:

  • 我上次使用它时,必须告知 Coveralls 测试套件已并行化。如果没有给出警告,Coveralls 将显示部分结果。为避免这种情况,您可以告诉 Coveralls 您的并行化测试套件已完成。有关详细信息,请参阅 the docs,但简要地说:

    • 在您的 CI 服务器上设置环境变量 COVERALLS_PARALLEL=true
    • POST { "payload": { "build_num": 1234, "status": "done" } }https://coveralls.io/webhook?repo_token=(your repo token) 在构建结束时。 (一些托管 CI 服务会自动计算出负载。)
  • 如果您 运行 您的测试套件不止一次重试不稳定的测试,重试的部分结果 运行 可以覆盖第一个 [=40] 的几乎全部结果=].我看到的问题是自制重试设置所特有的,但是,如果您正在做类似的事情,请仔细考虑它是否会混淆工作服。

关于您的覆盖率报告中遗漏的完全未经测试的 类,这不是 Coveralls 特有的。如果您想确保所有 类 都已加载,load them eagerly before running your tests. Untested classes and methods are often unused, so auditing your app with a dead code detector like debride 也可以是实现更好覆盖率的重要一步。