ruby-on-rails - 使用 simplecov 进行最小测试

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

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

相关文章:

testing - 在语句 "33.08% covered at 12.13 hits/line"中,hits/line 是什么意思?

ruby - 我如何在 MiniTest 中 stub ?

ruby-on-rails - 我的 Controller (Ruby on Rails)中的所有 if 语句都被视为 true 吗?

javascript - 使用文本输入字段求和时,JavaScript 中显示 NaN

ruby-on-rails - 如何实现一个基于订阅的DB,比如basecamp

ruby-on-rails - 是否可以 stub ActiveRecord 的保存方法

ruby-on-rails - 在 Rails 4 中使用具有间隙的 fixture 进行单元测试用户模型

ruby-on-rails - Highcharts 超过了 chrome 中的容器

javascript - JS 代码覆盖率

unit-testing - Gradle中的Sonarqube任务不会产生测试覆盖率