Skip to content

Commit 72b8beb

Browse files
committed
Fix Rails main integration tests
Two failures under Rails main (Ruby 4.0, SimpleCov 1.x): SimpleCov 1.0 replaced the `running` accessor with `active_session?` and deprecated `add_filter` in favor of `skip`, so the test app's test_helper crashed with NoMethodError before any test could load. Both call sites now pick the available API. Rails main assigns ActiveSupport::LogSubscriber.logger once during boot instead of falling back to Rails.logger on each event, so log subscribers such as Lograge kept writing to the boot logger after LogStruct replaced Rails.logger, and request logs bypassed the LogStruct appenders. The initializer order that decides this is not guaranteed, which is why it only reproduced on a freshly generated app.
1 parent dd97f5e commit 72b8beb

4 files changed

Lines changed: 34 additions & 3 deletions

File tree

lib/log_struct/semantic_logger/setup.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,12 @@ def self.replace_rails_logger(app)
221221
# Replace Rails.logger
222222
Rails.logger = logger
223223

224+
# Rails assigns ActiveSupport::LogSubscriber.logger once during boot
225+
# (in the active_support.set_log_subscriber_logger initializer), so log
226+
# subscribers such as Lograge keep writing to the original boot logger
227+
# unless this reference is updated along with Rails.logger.
228+
ActiveSupport::LogSubscriber.logger = logger
229+
224230
# Also replace various component loggers
225231
ActiveRecord::Base.logger = logger if defined?(ActiveRecord::Base)
226232
ActionController::Base.logger = logger if defined?(ActionController::Base)

rails_test_app/create_app.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,12 @@ def copy_template(file, target_path = nil)
356356
SimpleCov.start do
357357
root_path = File.expand_path('../../..', __dir__)
358358
coverage_dir File.join(root_path, 'coverage_rails')
359-
add_filter '/rails_test_app/'
359+
# SimpleCov >= 1.0 deprecated `add_filter` in favor of `skip`
360+
if SimpleCov.respond_to?(:skip)
361+
SimpleCov.skip '/rails_test_app/'
362+
else
363+
SimpleCov.add_filter '/rails_test_app/'
364+
end
360365
enable_coverage :branch
361366
primary_coverage :branch
362367
end

rails_test_app/templates/test/integration/logging_integration_test.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@
44
require "test_helper"
55

66
class LoggingIntegrationTest < ActionDispatch::IntegrationTest
7+
# Rails assigns ActiveSupport::LogSubscriber.logger once during boot, so log
8+
# subscribers (Lograge, Active Record, Action Controller) write to that
9+
# reference rather than looking up Rails.logger on each event.
10+
def test_log_subscribers_use_the_logstruct_logger
11+
assert_kind_of LogStruct::SemanticLogger::Logger, ActiveSupport::LogSubscriber.logger
12+
end
13+
714
# Basic test to ensure the Rails app is working
815
def test_healthcheck_works
916
get "/health"

rails_test_app/templates/test/test_helper.rb

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,15 @@
77
require "open3"
88
require "timeout"
99

10-
unless SimpleCov.running
10+
# SimpleCov >= 1.0 replaced the `running` accessor with `active_session?`
11+
simplecov_started =
12+
if SimpleCov.respond_to?(:active_session?)
13+
SimpleCov.active_session?
14+
else
15+
SimpleCov.running
16+
end
17+
18+
unless simplecov_started
1119
SimpleCov.formatters = [
1220
SimpleCov::Formatter::HTMLFormatter,
1321
SimpleCov::Formatter::JSONFormatter
@@ -19,7 +27,12 @@
1927
gem_path = File.expand_path("../../../../", __FILE__)
2028
SimpleCov.root(gem_path)
2129

22-
add_filter "rails_test_app"
30+
# SimpleCov >= 1.0 deprecated `add_filter` in favor of `skip`
31+
if SimpleCov.respond_to?(:skip)
32+
SimpleCov.skip "rails_test_app"
33+
else
34+
SimpleCov.add_filter "rails_test_app"
35+
end
2336

2437
coverage_dir "coverage_rails"
2538

0 commit comments

Comments
 (0)