[rspec-users] Mock Global method

David Chelimsky
Thu, 25 Mar 2010 14:29:51 -0000

On Mar 25, 2010, at 8:44 AM, garren wrote:

> I''m actually looking to mock "my_helper_method" here. Or
to be more
> general any method that is created outside of a class.

When you create a method outside a class, it is available on every object:

def foo
  "foo"
end

class Bar
end

describe Bar do
  it "responds to foo" do
    Bar.new.foo.should == "foo"
  end
end

In terms of mocking or stubbing that, just do it directly on the object.

describe Widget do
  it "does something" do
    widget = Widget.new
    widget.stub(:some_method_i_defined_outside_a_class) { "this value"
}
    # ...
  end
end

HTH,
David

PS, if you''re mocking or stubbing a method, it doesn''t need to
actually exist.

> On Mar 25, 6:27 am, "J. B. Rainsberger" <jbrainsber... at
gmail.com>
> wrote:
>> 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
>> _______________________________________________
>> rspec-users mailing list
>> rspec-us... at
rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users