Setting HTTP_REFERER in global before (: all) in Rspec

To avoid adding

request.env["HTTP_REFERER"] = '/' 

before the block in every controller_spec file that I create, I tried to add it to the global configuration (in spec_helper.rb)

 config.before(:each) {request.env["HTTP_REFERER"] = '/'} 

The problem is that I get the following error:

 You have a nil object when you didn't expect it! The error occurred while evaluating nil.env 

Does anyone have directions on how to implement this correctly?

Hooray!

+6
ruby-on-rails rspec
source share
2 answers

You tried

  config.before(:type => :controller) do request.env["HTTP_REFERER"] = "/" end 
+12
source

I notice that Matt's answer was 2 years ago, I'm not sure which version of rspec he used. but for my case, my version is rspec = 1.3.2, and the code segment does not work (the error always turned out:

 You might have expected an instance of Array. The error occurred while evaluating nil.<< from /usr/lib/ruby/gems/1.8/gems/rspec-1.3.2/lib/spec/runner/configuration.rb:181:in `__send__' from /usr/lib/ruby/gems/1.8/gems/rspec-1.3.2/lib/spec/runner/configuration.rb:181:in `add_callback' from /usr/lib/ruby/gems/1.8/gems/rspec-1.3.2/lib/spec/runner/configuration.rb:101:in `before' ... 

) until I change it a bit:

 # here the ":each" symbol is very important and necessary. # :type => :controller is the "option" config.before(:each, :type => :controller) do request.env["HTTP_REFERER"] = "/" end 

refer to rspec-1.3.2 doc:

 append_before(scope = :each, options={}, &proc) Appends a global before block to all example groups. scope can be any of :each (default), :all, or :suite. When :each, the block is executed before each example. When :all, the block is executed once per example group, before any of its examples are run. When :suite the block is run once before the entire suite is run. 
+1
source

All Articles