minitest与simplecov

sam*_*era 2 code-coverage ruby-on-rails minitest simplecov

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

COVERAGE=true ruby -Itest test/views/info_pages_test.rb
COVERAGE=true ruby -Itest test/views/errors_test.rb
Run Code Online (Sandbox Code Playgroud)

现在我的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
Run Code Online (Sandbox Code Playgroud)

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

.simplecov文件

SimpleCov.use_merging true
SimpleCov.merge_timeout 3600
Run Code Online (Sandbox Code Playgroud)

The*_*ous 5

您遇到的问题是,每个"测试套件"都会相互覆盖,因为套件名称(可配置通过SimpleCov.command_name 'xyz'),而不是合并例如黄瓜和rspec结果.

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

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

虽然您可以将此工作用于单独的测试运行,但一般情况下我建议仅在完整的测试套件运行基础上覆盖覆盖率报告,因为其他方法会留下错误的余地.