Регистрация ошибок является частью его функциональности. Вместо того, чтобы заставить замолчать спасение, запишите журнал ошибок.
Как написано, вы можете сделать это, издеваясь над регистратором . Используйте with
для настройки ожидаемых аргументов Rails.logger.error
. Поскольку вы не знаете точно, что будет получено, вы можете использовать различные совпадения, такие как instance_of
, чтобы проверить, что вы получили то, что backtrace
возвращает, массив.
it 'logs the backtrace as an error' do
# This comes before you call the method to set up the mock which expects
# to be called.
expect(Rails.logger).to receive(:error)
.with(instance_of(Array))
thing.some_method
end
, потому что это заменяет Rails.logger
, если что-то еще в процессе thing.some_method
вызывает Rails.logger
, тест не пройден.
Мы можем сделать это проще с помощью небольшого рефакторинга. Вместо непосредственного использования Rails.logger
сделайте его атрибутом.
class SomeClass
attr_accessor :logger
def initialize
@logger = Rails.logger
end
def some_method
a_method_call
some_other_object.a_method_that_has_been_refactored
rescue StandardError => e
logger.error e.backtrace
end
end
Теперь мы можем специально высмеивать то, что возвращается из thing.logger
.
it 'logs the backtrace as an error' do
# This comes before you call the method to set up the mock which expects
# to be called.
expect(thing.logger).to receive(:error)
.with(instance_of(Array))
thing.some_method
end