On Jul 10, 2010, at 1:26 PM, Daniel Salmeron Amselem wrote: > On Jul 9, 2:45 pm, Daniel Salmeron Amselem <daniel.amse...@gmail.com> > wrote: >> I've been trying to test a very simple action on a controller with >> this setup: >> >> rspec 1.3.0 >> ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0] >> Rails 2.3.8 >> devise 1.0.8 >> >> And this is the test: >> >> before :each do >> @member = Factory.create(:member) >> sign_in @member >> @person = Person.new >> end >> >> it "should render form for a new person on GET people#new" do >> current_member.should_receive(:build_person).and_return(@person) >> >> get :new >> >> assigns[:person].should == @person >> response.should be_success >> response.should render_template("new") >> end >> >> This test creates a user, which is stored in the database with a >> correct password. Running this test results in this error: >> >> 1) >> NoMethodError in 'PeopleController Methods should render form for a >> new person on GET people#new' >> You have a nil object when you didn't expect it! >> You might have expected an instance of ActiveRecord::Base. >> The error occurred while evaluating nil.[]= >> /Library/Ruby/Gems/1.8/gems/warden-0.10.4/lib/warden/ >> session_serializer.rb:25:in `store' >> /Library/Ruby/Gems/1.8/gems/devise-1.0.8/lib/devise/test_helpers.rb: >> 73:in `sign_in' >> /Users/damselem/Documents/project/spec/controllers/ >> people_controller_spec.rb:15: >> >> Finished in 0.625754 seconds >> >> 23 examples, 1 failure >> >> I wen to /Library/Ruby/Gems/1.8/gems/warden-0.10.4/lib/warden/ >> session_serializer.rb and I changed the file in order to print out >> some values: >> >> def store(user, scope) >> return unless user >> p scope >> p key_for(scope) >> p user >> p serialize(user) >> p session >> session[key_for(scope)] = serialize(user) >> end >> >> When running the test again I get: >> >> :member >> >> "warden.user.member.key" >> >> Member id: 1, email: "memb...@hv_club.com", encrypted_password: >> "c79e5e4790643b284002bf6ad8045f53ff900afc", password_salt: >> "Rim9LiyKARU1SHQCWIb0", confirmation_token: nil, confirmed_at: nil, >> confirmation_sent_at: nil, reset_password_token: nil, remember_token: >> nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: >> nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: >> nil, created_at: "2010-07-09 16:45:44", updated_at: "2010-07-09 >> 16:45:44" >> >> [Member(id: integer, email: string, encrypted_password: string, >> password_salt: string, confirmation_token: string, confirmed_at: >> datetime, confirmation_sent_at: datetime, reset_password_token: >> string, remember_token: string, remember_created_at: datetime, >> sign_in_count: integer, current_sign_in_at: datetime, last_sign_in_at: >> datetime, current_sign_in_ip: string, last_sign_in_ip: string, >> created_at: datetime, updated_at: datetime), 1] >> >> nil >> >> So it seems session is not initialized. Any ideas on how to fix this? >> BTW, I already contacted Jose Valim through GitHub and he recommended >> me to post my question in this >> group.http://github.com/plataformatec/devise/issues/issue/374 >> >> Thanks.
> I've been doing some research on this problem, and I found this > discussion on Lighthouse: > https://rspec.lighthouseapp.com/projects/5645/tickets/963-request-is-nil > > As it seems, this is not a problem with Rails 3 anymore, but how can I > make it work for rails 2.3.8? We've got this in an app using devise with rails 2.3.5 - should work with 2.3.8. before do request.env['warden'].stub(:authenticate!) { double(User) } end HTH, David _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users