[rspec-users] Does anyone know how to mock the Rails Logger then set expectations with should_receive?

Pat Maddox pergesu at gmail.com
Thu Jun 12 19:30:45 EDT 2008

On Thu, Jun 12, 2008 at 4:03 PM, john <eagerwombat at gmail.com> wrote:
> Hey Guys,
> I'm trying to mock the Rails Logger for the following code:
> ...
>     rescue TimeoutError => error
>       $logger.error("#{self.name} Timeout for #{path}: #{error}") and return
>     rescue SocketError => error
>       $logger.error("#{self.name} SocketError for #{path}: #{error}") and
> return
>     rescue StandardError => error
>       $logger.error("#{self.name} Error for #{path}: #{error}") and return
>     end
> ...
> my failed attempt to spec:
>    logger = mock_model(Logger)
>    logger.stub(:error)
>    logger.should_receive(:error).with(:any_args)

You never set the $logger var to your new logger.  So it wouldn't do anything.

> Do you know of any solution for mocking this?

You could consider partially stubbing the rails logger.

> Also, do you think the Rails Logger is worth mocking?

I would say no.

In particular, sometimes logging is a domain requirement.  If that's
the case, you want to separate that kind of logging from all the log
info that Rails generates.  Read
to get some info on mocking loggers.


More information about the rspec-users mailing list