[rspec-users] Tests that require a logged in user / session cookie
Matthias Siegel
matthiassiegel at gmail.com
Thu Aug 25 09:38:33 EDT 2011
On 25/08/2011, at 11:10 AM, Justin Ko wrote:
>
>
> On Wed, Aug 24, 2011 at 6:40 PM, Matthias Siegel <matthiassiegel at gmail.com> wrote:
> Hi,
>
> I'm fairly new to RSpec with Rails and I'm trying to work out how I can write request specs for resources that require a logged in user.
>
> I can't get this one to pass:
>
>
> describe "GET /admin/account" do
>
> it "should have a 200 status code when logged in" do
> post "/login", { :email => @user.email, :password => @user.password }
> response.should redirect_to("/admin")
> response.code.should eq("302")
> get "/admin/account"
> response.code.should eq("200")
> end
>
> end
>
>
> The login post part works fine and the session gets created correctly in the login method, but then the test fails at 'get "/admin/account"' because the session suddenly is empty.
>
> I have tried another approach where I set the session manually, to simulate a logged in user:
>
>
> describe "GET /admin/account" do
>
> it "should have a 200 status code when logged in" do
> session[:user_id] ||= @user.id
> get "/admin/account"
> response.code.should eq("200")
> end
>
> end
>
>
> But again the session arrives empty in my authorisation method when trying 'get "/admin/account"'.
>
> My guess is that it fails because the session relies on cookies and in test mode there obviously is no browser and no cookie.
> Are there ways to simulate a logged in user in an app that creates sessions with cookies?
>
> Thanks for any suggestions
>
> What you are doing *should* work. Are there any before_filters altering the session? Maybe a gem doing it? Maybe you have an admin namespace that calls/uses a different session?
I have an admin namespace, but does that effect the normal 'session' object in any way?
I've done some more tests and setting the session in the RSpec code via session[:user_id] =|| @user.id definitely works, however when the GET request starts, the session is empty in the application_controller before anything else is executed. I still can't figure out where the session gets lost between RSpec and the app. I reduced the gems to a minimum set of Rails, Mongoid, BCrypt, Mail, RSpec, Cucumber and Factory_Girl, but didn't make a difference.
Forgery protection is disabled for test environment.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20110825/291d0e5c/attachment-0001.html>
More information about the rspec-users
mailing list