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.