我正在尝试测试这样的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
答案 0 :(得分:5)
您遇到的问题是,每个“测试套件”都会相互覆盖,因为套件名称(可通过SimpleCov.command_name 'xyz'
配置),而不是合并例如黄瓜和rspec结果。
首选解决方案:通过使用rake测试或其他类似工具运行整个测试套件来生成覆盖率报告。
如果您坚持运行单个测试文件,您可以通过使用ARGV提供伪随机命令名称(即SimpleCov.command_name "MiniTest #{Time.now}"
或(取决于您的设置))来欺骗SimpleCov合并这些结果而不是覆盖它们,即SimpleCov.command_name "Minitest #{File.basename(ARGV[1])}"
。后者的优点是不会在重新运行相同的测试文件时重复结果,因为这些将在合并时被覆盖,但是当您运行所有测试并且没有正确检查ARGV的存在或测试框架时可能会失败在你拿到它之前篡改ARGV。
虽然您可以为单独的测试运行进行此项工作,但一般情况下我建议仅在完整的测试套件运行时使用覆盖率报告,因为其他方法会留下错误的空间。