Ruby 在 Rails 上使用 simplecov 测试覆盖率
Ruby on Rails test coverage with simplecov
我想分析我们代码的测试覆盖率,因此安装了 simplecov gem.
我们的测试环境有 2 个独立的项目:REST API 测试(Java+Rest-Assured)和 Web UI 测试(Java-Selenium)。
如您所见,我们没有在 rails 应用程序内部进行单元测试,我们正在使用外部项目进行测试。
我按照教程中的描述配置了 simplecov gem 并将其放在 rails 脚本中:
require 'simplecov'
SimpleCov.start 'rails'
puts "require simplecov"
加载应用程序时,我看到了我打印的字符串。
我 运行 两个自动化测试项目,在 rails 日志中看到了它们的打印输出,但我没有看到 any 覆盖 controllers/models,我明白了一些 gem 和 rails.
的初始化文件只有很小的百分比
我在网上搜索,并尝试将代码短语放入 boot.rb 甚至 puma.rb 中,但它返回了相同的结果。
有什么想法吗?
编辑
所有的评论都没有帮助,但我发现了一些非常有趣的东西,在所有情况下,我只看到标记为已测试的方法的名称,而不是内容(在控制器中)。
我尝试将 simplecov 起始短语放在 bin/rails、puma.rb、config.ru、environment.rb 中,都没有给出预期的代码覆盖率结果。
也许你必须指定路径
require 'simplecov'
SimpleCov.start do
# add_filter '/admin/'
add_group "Models", "app/models"
add_group "Controllers", "app/controllers"
add_group "Lib", "lib/"
add_group "Helpers", "app/helpers"
end
您需要在加载任何文件之前启动 SimpleCov,因此请将这些行尽早放入您的 ruby 入口点:
require 'simplecov'
SimpleCov.start
你可以在我的一个回购协议中看到一个例子:
https://github.com/tareksamni/DockUp/blob/master/spec/spec_helper.rb
我在开始 SimpleCov
后执行 autoload
我的 ruby 代码。你也需要:
require 'simplecov'
SimpleCov.start
require './autoload'
我不确定 simplecov 是否可以测量整个 rails 应用程序覆盖范围...但我用谷歌搜索了一些可以附加为机架中间件的东西:
https://github.com/danmayer/coverband
并且它的输出与 simplecov 兼容。所以它看起来对你的情况很有用。
正如您在问题中提到的,您使用的是 puma。我怀疑,由于它是多线程的,它会生成一些 rails 应用程序,并且它们的 simplecov 输出会覆盖彼此的结果。我会尝试使用像 webrick 这样的单线程服务器 - 但这可能会使您的测试变慢(取决于测试的实际启动方式)或尝试 coverband
gem.
此外 - 即使服务器是单线程的 - 我不确定每个请求是否不会覆盖 simplecov
的输出。
我想分析我们代码的测试覆盖率,因此安装了 simplecov gem.
我们的测试环境有 2 个独立的项目:REST API 测试(Java+Rest-Assured)和 Web UI 测试(Java-Selenium)。
如您所见,我们没有在 rails 应用程序内部进行单元测试,我们正在使用外部项目进行测试。
我按照教程中的描述配置了 simplecov gem 并将其放在 rails 脚本中:
require 'simplecov'
SimpleCov.start 'rails'
puts "require simplecov"
加载应用程序时,我看到了我打印的字符串。
我 运行 两个自动化测试项目,在 rails 日志中看到了它们的打印输出,但我没有看到 any 覆盖 controllers/models,我明白了一些 gem 和 rails.
的初始化文件只有很小的百分比
我在网上搜索,并尝试将代码短语放入 boot.rb 甚至 puma.rb 中,但它返回了相同的结果。
有什么想法吗?
编辑
所有的评论都没有帮助,但我发现了一些非常有趣的东西,在所有情况下,我只看到标记为已测试的方法的名称,而不是内容(在控制器中)。
我尝试将 simplecov 起始短语放在 bin/rails、puma.rb、config.ru、environment.rb 中,都没有给出预期的代码覆盖率结果。
也许你必须指定路径
require 'simplecov'
SimpleCov.start do
# add_filter '/admin/'
add_group "Models", "app/models"
add_group "Controllers", "app/controllers"
add_group "Lib", "lib/"
add_group "Helpers", "app/helpers"
end
您需要在加载任何文件之前启动 SimpleCov,因此请将这些行尽早放入您的 ruby 入口点:
require 'simplecov'
SimpleCov.start
你可以在我的一个回购协议中看到一个例子: https://github.com/tareksamni/DockUp/blob/master/spec/spec_helper.rb
我在开始 SimpleCov
后执行 autoload
我的 ruby 代码。你也需要:
require 'simplecov'
SimpleCov.start
require './autoload'
我不确定 simplecov 是否可以测量整个 rails 应用程序覆盖范围...但我用谷歌搜索了一些可以附加为机架中间件的东西:
https://github.com/danmayer/coverband
并且它的输出与 simplecov 兼容。所以它看起来对你的情况很有用。
正如您在问题中提到的,您使用的是 puma。我怀疑,由于它是多线程的,它会生成一些 rails 应用程序,并且它们的 simplecov 输出会覆盖彼此的结果。我会尝试使用像 webrick 这样的单线程服务器 - 但这可能会使您的测试变慢(取决于测试的实际启动方式)或尝试 coverband
gem.
此外 - 即使服务器是单线程的 - 我不确定每个请求是否不会覆盖 simplecov
的输出。