I'm trying to set a session object from my controller spec.
it 'use invalid coupon' do
session[:coupon] = 'abcd'
Service.any_instance.stub(:validate_coupon).with(session[:coupon]).and_return('abcd')
get :index
expect(flash[:coupon__notice]).to be nil
end
but when I inspect the session, instead of a @coupon object, I get a @data that contains the string 'coupon', and test fails.
This is explained in the Guide to Testing Rails Applications in section 4 "Functional Tests for your Controllers. The get
action takes a params hash and a session hash, e.g.:
get(:show, {'id' => "12"}, {'user_id' => 5})
You should be able to pass in nil
for the params hash in your example, then pass in your desired session parameters:
get :index, nil, {coupon: 'abcd'}
I recommend a thorough reading of the Rails guide for anyone using RSpec for Rails testing. rspec-rails
leverages the existing Rails test classes, a point which is not made very clear in the rspec-rails
docs.