[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.
$logger.should_receive(:error)

> 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
http://www.mockobjects.com/2007/04/test-smell-logging-is-also-feature.html
to get some info on mocking loggers.

Pat


More information about the rspec-users mailing list