2

我正在尝试像这样测试 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
4

1 回答 1

5

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

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

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

尽管您可以针对单个测试运行进行这项工作,但总的来说,我建议仅将覆盖率报告基于完整的测试套件运行,因为其他方法会为错误留有余地。

于 2013-03-25T14:18:29.820 回答