Ruby on Rails使用simplecov测试覆盖率

时间:2018-08-12 14:20:19

标签: ruby-on-rails ruby automated-tests simplecov


我想分析我们代码的测试范围,因此安装了simplecov gem。

我们的测试环境有两个独立的项目:REST API测试(Java + Rest-Assured)和Web UI测试(Java-Selenium)。
如您所见,我们在Rails应用程序内没有单元测试,而我们正在使用外部项目进行测试。

我按照教程中的说明配置了simplecov gem,并将其放在rails脚本中:

require 'simplecov'
SimpleCov.start 'rails'
puts "require simplecov"

在加载应用程序时,我看到了打印的字符串。

我运行了两个自动化测试项目,在rails日志中看到了它们的打印输出,但是我没看到任何关于控制器/模型的报道,我只看到了一些宝石和rails的初始化文件的很小一部分。 br />
我在网上搜索,然后尝试将代码短语放入boot.rb甚至puma.rb中,并返回了相同的结果。



有什么想法吗?

EDIT

所有注释都无济于事,但我发现非常有趣的东西,在所有情况下,我只看到标记为已测试的方法名称,而不是内容(在控制器中)。
我试图将simplecov起始短语放在bin / rails,puma.rb,config.ru,environment.rb中,但都没有给出所需的代码覆盖率结果。

3 个答案:

答案 0 :(得分:2)

我不确定simplecov是否可以衡量整个Rails应用程序的覆盖范围...但是我在Google上搜索了一些可以作为机架中间件附加的内容:

https://github.com/danmayer/coverband

它的输出与simplecov兼容。这样看来对您的情况可能有用。

您在问题中提到您正在使用puma。我怀疑,由于它是多线程的,因此产生了一些Rails应用程序,并且它们的simplecov输出会覆盖彼此的结果。我会尝试使用像webrick这样的单线程服务器-但这可能会使您的测试变慢(取决于测试的启动方式)或尝试coverband gem。

而且-即使服务器是单线程的-我也不知道每个请求是否不会覆盖simplecov的输出。

答案 1 :(得分:0)

也许您必须指定路径

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

答案 2 :(得分:0)

您需要在加载任何文件之前启动SimpleCov,因此应将这些行尽早放入ruby入口点:

require 'simplecov'
SimpleCov.start

您可以在我的一个回购中看到一个示例: https://github.com/tareksamni/DockUp/blob/master/spec/spec_helper.rb

在启动autoload之后,我做了SimpleCov我的红宝石代码。您也需要相同:

require 'simplecov'
SimpleCov.start

require './autoload'