On Fri, Aug 26, 2011 at 12:12 AM, Matthias Siegel <matthiassie...@gmail.com>wrote:
> > On 25/08/2011, at 11:45 PM, Justin Ko wrote: > > > > On Thu, Aug 25, 2011 at 7:38 AM, Matthias Siegel <matthiassie...@gmail.com > > wrote: > >> >> 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. >> >> >> > I assume you're on the latest version of Rails and RSpec? > > Also, I'm going to need to see some code. The spec and the controller > action (and before_filter). > > > > Yes, I'm running the latest versions of all gems. > > I just found this: > > http://stackoverflow.com/questions/5235084/testing-sessions-in-rails-3-with-rspec-capybara > > It looks a lot like the issue that I have. > > The answer mentions that sessions aren't available in request specs because > of capybara. To be honest I'm not much familiar with what capybara actually > does but I have reproduced this by basically moving the test into a > controller spec, and suddenly the session goes through and doesn't show up > empty in the authorize method of my app. > > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users > Oh jeez, I thought you were using a controller spec the entire time because of the methods being used. Yes, capybara restricts you from accessing the session, which is a *good thing* for request specs.
_______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users