Inside an rspec support module, my app is calling perform_enqueued_jobs
. The spec in question that is using this support module is expecting this call to raise an exception.
When I attempt to run this spec, the following is raised:
got #<NameError: undefined local variable or method `tagged_logger'
When I debug into perform_enqueued_jobs
, I am taken into _assert_nothing_raised_or_warn
inside activesupport-7.0.0/lib/active_support/testing/assertions.rb
, When debugging the block below, it shows e
as having the expected exception.
rescue Minitest::UnexpectedError => e
if tagged_logger && tagged_logger.warn?
warning = <<~MSG
#{self.class} - #{name}: #{e.error.class} raised.
If you expected this exception, use `assert_raises` as near to the code that raises as possible.
Other block based assertions (e.g. `#{assertion}`) can be used, as long as `assert_raises` is inside their block.
MSG
tagged_logger.warn warning
end
raise
end
Debugging further reveals that the if tagged_logger
check above is causing the undefined error.
Questions:
- Do I need to do something in
config/environments/test.rb
to set up a logger to work around this? - Is this a bug? Specifically, should
defined?(tagged_logger)
be used instead?