11


我想分析我们代码的测试覆盖率,因此安装了 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 日志中看到了它们的打印输出,但是我没有看到任何控制器/模型的覆盖,我只看到一些 gems 和 rails 的初始化文件的一小部分。

我在网上搜索,并尝试将代码短语放在 boot.rb 甚至 puma.rb 中,它返回了相同的结果。



有任何想法吗?

编辑

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

4

3 回答 3

2

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

https://github.com/danmayer/coverband

它的输出与 simplecov 兼容。所以它看起来对你的情况很有用。

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

此外 - 即使服务器是单线程的 - 我不确定每个请求是否不会覆盖simplecov的输出。

于 2018-08-29T10:18:53.457 回答
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
于 2018-08-26T21:33:26.870 回答
0

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

require 'simplecov'
SimpleCov.start

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

我在开始后做autoload我的 ruby​​ 代码SimpleCov。你也需要同样的:

require 'simplecov'
SimpleCov.start

require './autoload'
于 2018-08-28T21:24:04.147 回答