RSpec: comment faire pour tester les Rails de l'enregistreur de message attentes?

Je suis en train de tester que les Rails enregistreur reçoit des messages dans certains de mes spécifications. Je suis l'aide de la La journalisation des gem.

Disons que j'ai une classe comme ceci:

class BaseWorker

  def execute
    logger.info 'Starting the worker...'
  end

end

Et un spec comme:

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

J'obtiens le message d'erreur:

 Failure/Error: logger_mock.should_receive(:info).with('Starting worker...')
   (Double "Logging::Rails").info("Starting worker...")
       expected: 1 time
       received: 0 times

J'ai essayé plusieurs approches différentes pour faire passer la spec. Cela fonctionne par exemple:

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

Mais d'avoir à l'installation accessible une variable d'instance, comme cela semble être la queue qui remue le chien ici. (En fait, je ne suis même pas sûr pourquoi, la copie de l'enregistreur vers @journal le faire passer.)

Ce qui est une bonne solution pour tester l'enregistrement?

  • Cette question surgit à plusieurs reprises, voir par exemple ici et here et le consensus général est que vous n'avez pas fait de test de journalisation sauf si c'est un projet de l'exigence.
  • Art, merci pour le commentaire. Je n'ai pas lu ceux-là. C'est peut être la réponse ultime.
InformationsquelleAutor keruilin | 2012-06-12