123456789_123456789_123456789_123456789_123456789_

Module: ActiveSupport::LogSubscriber::TestHelper

Relationships & Source Files
Namespace Children
Classes:
Defined in: activesupport/lib/active_support/log_subscriber/test_helper.rb

Overview

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

  setup do
    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 and 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.

Instance Method Summary

Instance Method Details

#set_logger(logger)

Overwrite if you use another logger in your log subscriber.

def logger
  ActiveRecord::Base.logger = @logger
end
[ GitHub ]

  
# File 'activesupport/lib/active_support/log_subscriber/test_helper.rb', line 101

def set_logger(logger)
  ActiveSupport::LogSubscriber.logger = logger
end

#setup

This method is for internal use only.
[ GitHub ]

  
# File 'activesupport/lib/active_support/log_subscriber/test_helper.rb', line 38

def setup # :nodoc:
  @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

#teardown

This method is for internal use only.
[ GitHub ]

  
# File 'activesupport/lib/active_support/log_subscriber/test_helper.rb', line 49

def teardown # :nodoc:
  set_logger(nil)
  ActiveSupport::Notifications.notifier = @old_notifier
end

#wait

Wait notifications to be published.

[ GitHub ]

  
# File 'activesupport/lib/active_support/log_subscriber/test_helper.rb', line 92

def wait
  @notifier.wait
end