module ActiveSupport::LogSubscriber::TestHelper
Provides some helpers to deal with testing log subscribers by setting up notifications. Take for instance Active Record subscriber tests:
class SyncLogSubscriberTest < ActiveSupport::TestCase include ActiveSupport::LogSubscriber::TestHelper def setup ActiveRecord::LogSubscriber.attach_to(:active_record) end def test_basic_query_logging Developer.all.to_a wait assert_equal 1, @logger.logged(:debug).size assert_match(/Developer Load/, @logger.logged(:debug).last) assert_match(/SELECT \* FROM "developers"/, @logger.logged(:debug).last) end end
All you need to do is to ensure that your log subscriber is added to Rails::Subscriber, as in the second line of the code above. The test helpers are responsible for setting up the queue, subscriptions and turning colors in logs off.
The messages are available in the @logger instance, which is a logger with limited powers (it actually does not send anything to your output), and you can collect them doing @logger.logged(level), where level is the level used in logging, like info, debug, warn and so on.
Public Instance Methods
Overwrite if you use another logger in your log subscriber.
def logger ActiveRecord::Base.logger = @logger end
# File activesupport/lib/active_support/log_subscriber/test_helper.rb, line 99 def set_logger(logger) ActiveSupport::LogSubscriber.logger = logger end
# File activesupport/lib/active_support/log_subscriber/test_helper.rb, line 36 def setup @logger = MockLogger.new @notifier = ActiveSupport::Notifications::Fanout.new ActiveSupport::LogSubscriber.colorize_logging = false @old_notifier = ActiveSupport::Notifications.notifier set_logger(@logger) ActiveSupport::Notifications.notifier = @notifier end
# File activesupport/lib/active_support/log_subscriber/test_helper.rb, line 47 def teardown set_logger(nil) ActiveSupport::Notifications.notifier = @old_notifier end
Wait notifications to be published.
# File activesupport/lib/active_support/log_subscriber/test_helper.rb, line 90 def wait @notifier.wait end
© 2004–2016 David Heinemeier Hansson
Licensed under the MIT License.