我想分析我们代码的测试覆盖率,因此安装了simplecov gem。
我们的测试团队有两个独立的项目: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中,它都返回了相同的结果。
有什么想法吗?
- 编辑 *
所有的注解都没有帮助,但我发现了一些非常有趣的事情,在所有情况下,我只看到标记为测试的方法的名称,而不是内容(在控制器中)。
我尝试在bin/rails、puma.rb、config.ru、environment.rb中使用simplecov启动短语,但都没有给出代码覆盖率的预期结果。
4条答案
按热度按时间bvjxkvbb1#
我不确定Simplecov能否衡量整个Rails应用程序的覆盖率。但是我在谷歌上搜索了一些你可以作为机架中间件附加的东西:
https://github.com/danmayer/coverband
它的输出与simplecov兼容。所以看起来对你的案子很有用。
正如你在问题中提到的,你正在使用彪马。我怀疑,由于它是多线程的,它会产生一些rails应用程序,它们的simplecov输出会覆盖彼此的结果。我会尝试像webrick这样的单线程服务器,但这可能会使你的测试变慢(取决于测试是如何启动的),或者尝试
coverband
gem。另外,即使服务器是单线程的,我也不确定每个请求是否会覆盖
simplecov
的输出。ecfdbz9o2#
也许你必须指定路径
vq8itlhq3#
你需要在加载任何文件之前启动SimpleCov,所以尽可能早地将这些行放在你的ruby入口点中:
你可以在我的一个repos中看到一个例子:https://github.com/tareksamni/DockUp/blob/master/spec/spec_helper.rb
我在启动
SimpleCov
后执行了autoload
代码。你也需要同样的:rur96b6h4#
我也遇到了同样的问题,试图获得e2e剧作家测试的覆盖面。同时,SimpleCov在2020年添加了子进程处理,因此我为CI创建了unicorn conf
然后启动独角兽服务器,
做了测试
关闭服务器时,覆盖率将写入磁盘。为了能够将其发布到codacy,我添加了CI配置
给予一些时间让SimpleCov在尝试发送报告之前将其刷新到磁盘。最初我开始等待时间为0.2秒,但这是不够的,我增加到2秒。根据您运行的计算机和覆盖率报告的大小,您可能需要进一步增加它。