【问题标题】:minitest with simplecov用 simplecov 进行迷你测试
【发布时间】:2013-03-24 21:43:42
【问题描述】:

我正在尝试像这样测试 minitest 文件:

COVERAGE=true ruby -Itest test/views/info_pages_test.rb
COVERAGE=true ruby -Itest test/views/errors_test.rb

现在我的 info_pages_test 有 97% 的覆盖率,而我的 errors_test 有 75% 的覆盖率。它们一起应该覆盖 100%.. 但是每次我运行上述命令时,我都会得到一个结果或另一个 75% 或 97%。有没有办法将两个测试文件的结果合并到一个覆盖率报告中?

我们将不胜感激!

这是我的 minitest_helper.rb 文件的顶部

## SimpleCOV

require 'simplecov'

if ENV["COVERAGE"]

  SimpleCov.start('rails') do

    add_filter "/test/"

  end
  puts "Started SimpleCOV"
end

我在应用程序根目录中也有一个 .simplecov 文件,但使用它会给我带来不可预知的结果。我偶尔会获得 100% 的覆盖率,但这是不可预知的。

.simplecov 文件

SimpleCov.use_merging true
SimpleCov.merge_timeout 3600

【问题讨论】:

    标签: ruby-on-rails code-coverage minitest simplecov


    【解决方案1】:

    您遇到的问题是这些“测试套件”中的每一个都将相互覆盖,因为套件名称(可通过 SimpleCov.command_name 'xyz' 配置),而不是在合并黄瓜和 rspec 结果时。

    首选解决方案:使用 rake test 或其他类似工具一次运行整个测试套件来生成覆盖率报告。

    如果您坚持运行单个测试文件,您可以通过提供伪随机命令名称(即SimpleCov.command_name "MiniTest #{Time.now}")或(取决于您的设置)使用 ARGV(即@987654325)来欺骗 SimpleCov 合并这些结果而不是覆盖它们@。后者的优点是在重新运行同一测试文件时不会重复结果,因为这些结果将在合并时被覆盖,但是当您运行所有测试并且未正确检查 ARGV 或您的测试框架是否存在时可能会失败在你抓住它之前篡改 ARGV。

    虽然您可以针对单个测试运行进行这项工作,但总的来说,我建议您仅根据完整的测试套件运行来生成覆盖率报告,因为其他方法会留下错误空间。

    【讨论】:

    • 那么您如何建议我使用 rake 运行完整的“套件”(截至目前“test/*/*_test.rb”下的 2 个文件)?另外,我假设如果我找出 rake 路由.. 我不再需要应用程序根目录中的 .simplecov 文件?会喜欢一些帮助! .. 等等,我想我在研究这个的时候在 github 上见过你!
    • 完全披露:我是编写 simplecov 的人 :) 我自己没有使用 minitest,所以我不是专家,但这可能会有所帮助:stackoverflow.com/questions/4788288/… - 你仍然需要.simplecovSimpleCov.start 在您的 test_helper.rb 顶部以启动 simplecov 的覆盖检测
    • 太棒了.. 我从这里 (stackoverflow.com/questions/10596478/…) 想出了如何在单个 rake 任务下运行所有​​ minitest 测试,现在 SimpleCOV 完美运行!它有点慢(即使是 zeus ..),但至少当我需要它们时我会得到正确的覆盖率报告!!
    • 酷,一路走好!顺便说一句,在 MRI(常规的 Ruby 实现,而不是 JRuby 或 Rubinius)上,覆盖率几乎不会影响性能,实际上低于 5%,所以 SimpleCov 的建议是一直保持它:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 2021-09-22
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    相关资源
    最近更新 更多