我正在尝试像这样测试 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
最佳答案
您遇到的问题是,每个“测试套件”都会相互覆盖,因为套件名称(可通过 SimpleCov.command_name 'xyz'
配置),而不是合并为 cucumber 和 rspec 结果示例。
首选解决方案:通过使用 rake 测试或其他类似工具一次运行整个测试套件来生成覆盖率报告。
如果您坚持运行单独的测试文件,您可以欺骗 SimpleCov 合并这些结果,而不是通过提供伪随机命令名称覆盖它们,即 SimpleCov.command_name "MiniTest #{Time.now}"
,或(取决于您的设置)使用 ARGV,即 SimpleCov.command_name "Minitest #{File.basename(ARGV[1])}"
。后者的优点是在重新运行同一测试文件时不会重复结果,因为这些结果将在合并时被覆盖,但当您运行所有测试并且未正确检查 ARGV 或测试框架是否存在时,可能会失败在你捕获 ARGV 之前对其进行篡改。
虽然您可以使这项工作适用于单独的测试运行,但一般来说,我建议仅根据完整的测试套件运行来生成覆盖率报告,因为其他方法会留下出错的空间。
关于ruby-on-rails - 使用 simplecov 进行最小测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15604390/