6

My ApplicationController exposes a method (e.g. sort_direction) to the view templates by using helper_method :sort_direction. I then use this method in another method (e.g. sort_link) of a view helper (application_helper.rb).

When testing the sort_link method with RSpec (in application_helper_spec.rb) I have to stub sort_direction as the test seems to run complete independent from the controllers (and thereby by its to the view templates exposed methods).

Unfortunately I could not find out how to stub that sort_direction method of the controller. I always get "undefined method".

Here is what I tried so far (inside application_helper_spec.rb):

helper.stub(:sort_direction)
controller.stub(:sort_direction)
view.stub(:sort_direction)
self.stub(:sort_direction)

Any suggestions how I can stub that method?

Here the error I get:

NoMethodError:
       undefined method `sort_direction' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0xb641434c>
medihack
  • 16,045
  • 21
  • 90
  • 134

1 Answers1

6

David Chelimsky solved that problem here: http://groups.google.com/group/rspec/browse_thread/thread/cc44ca12c6816053

Simply call in the spec all methods on the helper object:

it "should work" do
   helper.stub(:sort_direction)
   helper.sort_link(...).should == ...
end
medihack
  • 16,045
  • 21
  • 90
  • 134
  • This is now updated with rspec 3: `allow(helper).to receive(:sort_direction)` http://www.relishapp.com/rspec/rspec-mocks/v/3-1/docs/basics/allowing-messages – Edward Loveall Dec 16 '14 at 14:22