ruby 简单覆盖率0%

wfveoks0  于 2022-11-22  发布在  Ruby
关注(0)|答案(7)|浏览(172)

我正在处理一个小gem,其中包括simplecovspec_helper.rb两行:

require 'simplecov'
SimpleCov.start

当我运行rspec测试时,simplecov似乎正确启动了,但报告却不正确:

Finished in 0.00214 seconds
8 examples, 0 failures

Coverage report generated for /home/...... 
spec to /home/megas/Work/calc/coverage. 0 / 0 LOC (0.0%) covered.

什么可能是一个问题,如何解决它?谢谢

hc8w905p

hc8w905p1#

还要确保在文件的**开头启用simplecov(a.k.a. SimpleCov.start);特别是在需要代码之前。

vd8tlhqk

vd8tlhqk2#

我也有同样的症状。我的问题是在我的测试文件中:

#spec/oneclass_spec.rb
require 'oneclass'
require 'spec_helper'

...Rest of the test file

我需要将require的顺序更改为:

#spec/oneclass_spec.rb
require 'spec_helper'
require 'oneclass'

...Rest of the test file

希望这能帮到什么人,我都要疯了...

igsr9ssn

igsr9ssn3#

我也遇到过类似的问题。由于某种原因,一些模块的覆盖率为0%。经过调查,我发现其中一个初始化程序需要一个控制器,这导致模块在Simplecov之前被加载。我所做的就是将Simplecov移到初始化程序:

# config/initializers/_coverage_rspec.rb

if Rails.env.test?
  require 'simplecov'
  SimpleCov.start 'rails'
end

如果你正在使用spring,记得在运行覆盖率测试时关闭它。在另一种情况下,完整的应用程序代码将在SimpleCov之前加载,并报告0%的覆盖率。

0qx6xfy6

0qx6xfy64#

万一上面两个答案不起作用(就像我的情况一样),一个在simplecov的github问题页面上的用户建议这样做,这对我很有效。
在您需要simplecov-

module SimpleCov::Configuration
  def clean_filters
    @filters = []
  end
end

SimpleCov.configure do
  clean_filters
  load_adapter 'test_frameworks'
end
0kjbasz6

0kjbasz65#

如果以上任何一种都不起作用。
在test.rb中验证:

config.eager_load = false
e4yzc0pl

e4yzc0pl6#

在我的例子中,问题是Spring -我必须使用以下内容创建一个config/spring.rb

if ENV['RAILS_ENV'] == 'test'
  require 'simplecov'
  SimpleCov.start
end

如此处所述。

hmmo2u0o

hmmo2u0o7#

我从命令行运行脚本,我发现解决方案是简单地把一个exit在我的脚本结束。
或者,也可以使用以下方法

SimpleCov.at_exit do
  SimpleCov.result.format!
end

相关问题