Rspec2: fake parameters and request.headers for helpers

I have a Rails 3 helper that returns code based on parameters and request.headers. I tried to mock them, but failed. My last attempt:

require 'spec_helper' describe ApplicationHelper, "#banner" do before do @b728 = Factory :banner, :code => '<div style="width: 728px">:(clickref)</div>', :width => 728, :height => 90 @b160 = Factory :banner, :code => '<div style="width: 160px">:(clickref)&lt/div>', :width => 160, :height => 600 Factory :ad_sense_channel, :key => "country", :value => nil, :ad_sense_id => 1 Factory :ad_sense_channel, :key => "country", :value => "de", :ad_sense_id => 2 # More ad_sense_channel factories here... end it "should return b728 for 728x90, left position and DictionariesController, German language and a guest and a German IP" do helper.stub(:params) { {:controller => "dictionaries", :action => "index"} } helper.stub(:request) do request = double('request') request.stub(:headers) { {"Accept-Language" => "de-DE, kr"} } request end @detected_location = DetectedLocation.new("193.99.144.80") banner(728, 90, "left").should eq('<div style="width: 728px">11+2+21+31+41</div>') end end 

I still throw an exception:

 NameError: undefined local variable or method `params' for # # ./app/helpers/application_helper.rb:7:in `banner' 

Solution: thanks to zetetic, my specification is now read as follows:

 controller.params = {:controller => "dictionaries", :action => "index"} controller.request.stub(:headers) { {"Accept-Language" => "de-DE, kr"} } @detected_location = DetectedLocation.new("193.99.144.80") helper.banner(728, 90, "left").should eq('11+2+21+31+41') 
+4
source share
1 answer

Try changing banner to helper.banner

You will notice that when using the method name, the context itself is:

 self.class # => RSpec::Core::ExampleGroup::Nested_1 

But when called from helper this is:

 self.class # => ActionView::Base 

helper defined in RSpec :: Rails :: HelperExampleGroup and does the following:

 # Returns an instance of ActionView::Base with the helper being specified # mixed in, along with any of the built-in rails helpers. def helper _view.tap do |v| v.extend(ApplicationHelper) if defined?(ApplicationHelper) v.assign(view_assigns) end end 
+4
source

Source: https://habr.com/ru/post/1339493/


All Articles