-
Notifications
You must be signed in to change notification settings - Fork 553
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Coverage dropped in Rails 7.1 (fixed) #1082
Comments
Thanks a lot for sharing this. I've been searching for hours for a solution on this. |
Thanks for sharing this. It's probably best to put the suggested change inside of your # config/boot.rb
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
require "bundler/setup" # Set up gems listed in the Gemfile.
require "bootsnap/setup" # Speed up boot time by caching expensive operations.
if File.basename($PROGRAM_NAME) == "rails" && ARGV[0] =~ /^test/ || ENV["RAILS ENV"] == "test"
require_relative "../test/test_helper/coverage"
end
# test/test_helper.rb (top of the file)
ENV["RAILS_ENV"] ||= "test"
require_relative "test_helper/coverage"
# test/test_helper/coverage.rb
require "simplecov"
if ENV["CI"]
require "simplecov-json"
SimpleCov.formatters = SimpleCov::Formatter::MultiFormatter.new([
SimpleCov::Formatter::HTMLFormatter,
SimpleCov::Formatter::JSONFormatter,
])
end
SimpleCov.start("rails") if ENV["COVERAGE"] || ENV["CI"] |
Thanks for sharing! Here is my working setup on Rails edge (v8.0): config/boot.rbENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
require "bundler/setup" # Set up gems listed in the Gemfile.
require "bootsnap/setup" # Speed up boot time by caching expensive operations.
#
# NOTE:
# added here, see explanation: https://github.com/simplecov-ruby/simplecov/issues/1082
#
require "simplecov" if ENV["COVERAGE"] || ENV["CI"] test/test_helper.rb...
# Run tests in parallel with specified workers
parallelize(workers: :number_of_processors)
if ENV["COVERAGE"]
parallelize_setup { |worker| SimpleCov.command_name "#{SimpleCov.command_name}-#{worker}" }
parallelize_teardown { |_| SimpleCov.result }
end
... .simplecovSimpleCov.start :rails do
add_group "Services", "app/services"
add_group "Notifiers", "app/notifiers"
add_group "Errors", "app/errors"
end |
Note: When our test coverage dropped upgrading to Rails 7.1, it turns out we had a different problem. To run all tests, we were doing this as suggested by this StackOverflow answer: bundle exec rails test:system test However, when we upgraded this no longer ran all the tests. Changing to this worked: bundle exec rails test:all |
I've had some trouble understanding why my test coverage dropped after upgrading to Rails 7.1. I finally fixed the issue which I'll explain below. I'm not sure if this is intended this way, but if so, this might be useful for others to find.
After upgrading Rails, I noticed the coverage dropped significantly. After some diagnosing, I realised lib files which are required in
config/application.rb
had a coverage of 0%, although they were being covered by tests.After a while, I noticed the coverage only dropped when using
rails test
. When I triedrails test test/integration test/channel test/controllers test/jobs test/lib test/mailers test/models
, the coverage was correct.Then, I reduced the issue to this Rails commit, causing the
test:prepare
to be run when callingrails test
without args. Via this code path,config/application.rb
was loaded beforetest_helper.rb
.I've now moved
SimpleCov.start
tobin/rails
, like suggested in the Readme. This works, although I now have to specifyRAILS_ENV=test
when runningrails test
(this was done automatically in test_helper.rb before).Do we need to update the Readme to warn that files required in
config/application.rb
are not included in the coverage when runningrails test
in Rails 7.1?The text was updated successfully, but these errors were encountered: