RSpec set session object

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.


In Rails 5+, if you are using ActionController::TestCase session is passed as a keyword arg.

Setting params and session would look like:

get(:show, params: {'id' => "12"}, session: {'user_id' => 5})

Setting only the session would look like,

get(:show, session: {'user_id' => 5})

If you are using ActionDispatch::IntegrationTest, which is the new default for for controller tests, you are not able to set the session variables and should set them by walking your test through the login flow.