Accessing session attributes from an integration test


#1

I have a very simple integration test based off of an example and
Agile Web D. with Rails but I can’t seem to get it to work.
I’m simply setting a user id in the session via the get method in the
test but then can’t access it when it hits my login controller.

Here is the relevant code in the integration test


get :index, {}, { :user_id => users(:bart).id }
assert_response :success

and in the login controller that gets called by the filter

def authorize
puts “User ID from session[#{session[:user_id]}]”

unless session[:user_id]
  flash[:notice] = "Please log in"
  redirect_to(:controller => 'login', :action => 'login')
end

end

which prints out

#<ActionController::TestSession:0x38a08c4
@attributes={:user_id=>1, “flash”=>{}},
@saved_attributes=nil,
@session_id="">
User ID from session[]

and then fails because the redirect is carried out. Anybody know why
the attribute is set but not accessible via session[:user_id]? The
code works fine when I manually try it out deployed.


#2

Make sure that you are using the right key for the user id. Run rake
db:sessions:clear, restart your server and try again.


#3

I had to change

get :index, {}, { :user_id => users(:bart).id }

to

get :index, {}, { ‘user_id’ => users(:bart).id }

The book example uses the original symbol version.