On 25/08/2011, at 11:10 AM, Justin Ko wrote:

> 
> 
> On Wed, Aug 24, 2011 at 6:40 PM, Matthias Siegel <matthiassie...@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.
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to