[rspec-users] Mock Global method

J. B. Rainsberger jbrainsberger at gmail.com
Thu Mar 25 00:27:01 EDT 2010


garren wrote:

> I'm very new to ruby and mocking a dynamic language. I would like to
> mock a helper method in Sinatra. So an example is this:
>
>     helper do
>      def my_helper_method
>        puts "Should do something useful here..."
>      end
>    end
>
>
> How would I mock that method and how would I mock a method in general
> that is a global method. Is it better practice not to have global
> methods? Should I rather have an object inside the method call that
> does all the work and I can mock that?

You can probably set an expectation on Kernel#puts, since although #puts 
looks global, it belongs to Kernel.

As for whether you should use #puts directly here, or indirectly through 
another object that you can easily control, that depends on the 
situation. Try both and compare the results.

In your situation, I'd probably just set expectations on Kernel#puts 
until that caused me problems, at which point I'd separate the behavior 
of deciding what to print from deciding where to print it. I find 
formatting messages much easier to check, in general, than displaying them.

Have fun.
-- 
J. B. Rainsberger :: http://www.jbrains.ca ::
http://www.thecodewhisperer.com


More information about the rspec-users mailing list