RSpec: ¿cómo probar las expectativas de mensajes del registrador de Rails?
Estoy tratando de probar que el registrador Rails recibe mensajes en algunas de mis especificaciones. Estoy usando elGema maderera.
Digamos que tengo una clase como esta:
class BaseWorker
def execute
logger.info 'Starting the worker...'
end
end
Y una especificación como:
describe BaseWorker do
it 'should log an info message' do
base_worker = BaseWorker.new
logger_mock = double('Logging::Rails').as_null_object
Logging::Rails.stub_chain(:logger, :info).and_return(logger_mock)
logger_mock.should_receive(:info).with('Starting the worker...')
base_worker.execute
Logging::Rails.unstub(:logger)
end
end
Recibo el siguiente mensaje de error:
Failure/Error: logger_mock.should_receive(:info).with('Starting worker...')
(Double "Logging::Rails").info("Starting worker...")
expected: 1 time
received: 0 times
He probado varios enfoques diferentes para obtener la especificación para pasar. Esto funciona por ejemplo:
class BaseWorker
attr_accessor :log
def initialize
@log = logger
end
def execute
@log.info 'Starting the worker...'
end
end
describe BaseWorker do
it 'should log an info message' do
base_worker = BaseWorker.new
logger_mock = double('logger')
base_worker.log = logger_mock
logger_mock.should_receive(:info).with('Starting the worker...')
base_worker.execute
end
end
Pero tener que configurar una variable de instancia accesible como esa parece que la cola está moviendo al perro aquí. (En realidad, ni siquiera estoy seguro de por qué copiar el logger a @log lo haría pasar).
¿Qué es una buena solución para probar el registro?