我想分析我们代码的测试范围,因此安装了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中,但都没有给出所需的代码覆盖率结果。
答案 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'