модуль ActiveSupport::LogSubscriber::TestHelper
Предоставляет некоторые вспомогательные функции для тестирования подписчиков логов, настраивая уведомления. Например, тесты подписчиков Active Record:
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
Всё, что вам нужно сделать, это убедиться, что ваш подписчик логов добавлен в Rails::Subscriber, как во второй строке кода выше. Вспомогательные функции отвечают за настройку очереди, подписок и отключение цветности в логах.
Сообщения доступны в экземпляре @logger, который является логгером с ограниченными возможностями (он фактически ничего не отправляет на ваш вывод), и вы можете собрать их, используя @logger.logged(level), где level — это уровень, используемый при ведении журнала, например, info, debug, warn и так далее.
Общедоступные методы экземпляра
Переопределите, если вы используете другой логгер в своем подписчике логов.
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
Ожидать публикации уведомлений.
# 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.