Daniel Salmeron Amselem
2010-Jul-09 18:45 UTC
[rspec-users] Devise: session variable is empty on session_serializer.rb#store
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: "member2 at 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.
Daniel Salmeron Amselem
2010-Jul-10 18:26 UTC
[rspec-users] Devise: session variable is empty on session_serializer.rb#store
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? On Jul 9, 2:45?pm, Daniel Salmeron Amselem <daniel.amse... at 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: "member2 at 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. > _______________________________________________ > rspec-users mailing list > rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
David Chelimsky
2010-Jul-10 18:31 UTC
[rspec-users] Devise: session variable is empty on session_serializer.rb#store
On Jul 10, 2010, at 1:26 PM, Daniel Salmeron Amselem wrote:> On Jul 9, 2:45 pm, Daniel Salmeron Amselem <daniel.amse... at 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: "member2 at 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
Daniel Salmeron Amselem
2010-Jul-10 19:45 UTC
[rspec-users] Devise: session variable is empty on session_serializer.rb#store
Thanks David, but could you explain me how should I use this before do block in order to sign in an user? I am not a very experienced Rails developer and I tried different things like: 13 before :each do 14 # @member = Factory.create(:member) 15 request.env[''warden''].stub(:authenticate!) { double(Member) } 16 sign_in @member 17 @person = Person.new 18 end which throws this error: RuntimeError in ''PeopleController Methods should render form for a new person on GET people#new'' Could not find a valid mapping for /Library/Ruby/Gems/1.8/gems/devise-1.0.8/lib/devise/mapping.rb:49:in `find_scope!'' /Library/Ruby/Gems/1.8/gems/devise-1.0.8/lib/devise/test_helpers.rb: 71:in `sign_in'' /Users/damselem/Documents/Harvard/WebDev/hv_club/spec/controllers/ people_controller_spec.rb:16: Finished in 0.437813 seconds 23 examples, 1 failure Thanks David, and sorry for asking too much about this issue. On Jul 10, 2:31?pm, David Chelimsky <dchelim... at gmail.com> wrote:> On Jul 10, 2010, at 1:26 PM, Daniel Salmeron Amselem wrote: > > > > > > > On Jul 9, 2:45 pm, Daniel Salmeron Amselem <daniel.amse... at 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: "member2 at 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-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
David Chelimsky
2010-Jul-10 19:53 UTC
[rspec-users] Devise: session variable is empty on session_serializer.rb#store
On Jul 10, 2010, at 2:45 PM, Daniel Salmeron Amselem wrote:> > On Jul 10, 2:31 pm, David Chelimsky <dchelim... at gmail.com> wrote: >> On Jul 10, 2010, at 1:26 PM, Daniel Salmeron Amselem wrote: >> >> >> >> >> >>> On Jul 9, 2:45 pm, Daniel Salmeron Amselem <daniel.amse... at 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: "member2 at 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 > Thanks David, but could you explain me how should I use this before do > block in order to sign in an user?That''s all that''s in the before. It effectively signs in the user. If you have a specific user you want to use, you can do user = Factory(:user) request.env[''warden''].stub(:authenticate!) { user }> I am not a very experienced Rails > developer and I tried different things like: > > 13 before :each do > 14 # @member = Factory.create(:member) > 15 request.env[''warden''].stub(:authenticate!) { double(Member) } > 16 sign_in @member > 17 @person = Person.new > 18 end > > which throws this error: > > RuntimeError in ''PeopleController Methods should render form for a new > person on GET people#new'' > Could not find a valid mapping for > /Library/Ruby/Gems/1.8/gems/devise-1.0.8/lib/devise/mapping.rb:49:in > `find_scope!'' > /Library/Ruby/Gems/1.8/gems/devise-1.0.8/lib/devise/test_helpers.rb: > 71:in `sign_in'' > /Users/damselem/Documents/Harvard/WebDev/hv_club/spec/controllers/ > people_controller_spec.rb:16: > > Finished in 0.437813 seconds > > 23 examples, 1 failure > > Thanks David, and sorry for asking too much about this issue.
Daniel Salmeron Amselem
2010-Jul-10 20:21 UTC
[rspec-users] Devise: session variable is empty on session_serializer.rb#store
Oh, I tried that too, but then current_member doesn''t work.... 1) NameError in ''PeopleController Methods should render form for a new person on GET people#new'' undefined local variable or method `current_member'' for #<Spec::Rails::Example::ControllerExampleGroup::Subclass_2::Subclass_2:0x105b57ce0> /Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/ test_process.rb:511:in `method_missing'' /Users/damselem/Documents/Harvard/WebDev/hv_club/spec/controllers/ people_controller_spec.rb:21: Finished in 0.543299 seconds 23 examples, 1 failure which it seems to be available when using devise: http://github.com/plataformatec/devise/tree/v1.0.8 . Any idea? On Jul 10, 3:53?pm, David Chelimsky <dchelim... at gmail.com> wrote:> On Jul 10, 2010, at 2:45 PM, Daniel Salmeron Amselem wrote: > > > > > > > > > On Jul 10, 2:31 pm, David Chelimsky <dchelim... at gmail.com> wrote: > >> On Jul 10, 2010, at 1:26 PM, Daniel Salmeron Amselem wrote: > > >>> On Jul 9, 2:45 pm, Daniel Salmeron Amselem <daniel.amse... at 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: "member2 at 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 > > Thanks David, but could you explain me how should I use this before do > > block in order to sign in an user? > > That''s all that''s in the before. It effectively signs in the user. If you have a specific user you want to use, you can do > > user = Factory(:user) > ? request.env[''warden''].stub(:authenticate!) { user } > > > > > > > I am not a very experienced Rails > > developer and I tried different things like: > > > 13 ? ?before :each do > > 14 ? ? ?# @member = Factory.create(:member) > > 15 ? ? ?request.env[''warden''].stub(:authenticate!) { double(Member) } > > 16 ? ? ?sign_in @member > > 17 ? ? ?@person = Person.new > > 18 ? ?end > > > which throws this error: > > > RuntimeError in ''PeopleController Methods should render form for a new > > person on GET people#new'' > > Could not find a valid mapping for > > /Library/Ruby/Gems/1.8/gems/devise-1.0.8/lib/devise/mapping.rb:49:in > > `find_scope!'' > > /Library/Ruby/Gems/1.8/gems/devise-1.0.8/lib/devise/test_helpers.rb: > > 71:in `sign_in'' > > /Users/damselem/Documents/Harvard/WebDev/hv_club/spec/controllers/ > > people_controller_spec.rb:16: > > > Finished in 0.437813 seconds > > > 23 examples, 1 failure > > > Thanks David, and sorry for asking too much about this issue. > > _______________________________________________ > rspec-users mailing list > rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
David Chelimsky
2010-Jul-10 20:32 UTC
[rspec-users] Devise: session variable is empty on session_serializer.rb#store
On Jul 10, 2010, at 3:21 PM, Daniel Salmeron Amselem wrote:> On Jul 10, 3:53 pm, David Chelimsky <dchelim... at gmail.com> wrote: >> On Jul 10, 2010, at 2:45 PM, Daniel Salmeron Amselem wrote: >>> On Jul 10, 2:31 pm, David Chelimsky <dchelim... at gmail.com> wrote: >>>> On Jul 10, 2010, at 1:26 PM, Daniel Salmeron Amselem wrote: >> >>>>> On Jul 9, 2:45 pm, Daniel Salmeron Amselem <daniel.amse... at 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: "member2 at 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 >>> Thanks David, but could you explain me how should I use this before do >>> block in order to sign in an user? >> >> That''s all that''s in the before. It effectively signs in the user. If you have a specific user you want to use, you can do >> >> user = Factory(:user) >> request.env[''warden''].stub(:authenticate!) { user }> Oh, I tried that too, but then current_member doesn''t work.... > > 1) > NameError in ''PeopleController Methods should render form for a new > person on GET people#new'' > undefined local variable or method `current_member'' for > #<Spec::Rails::Example::ControllerExampleGroup::Subclass_2::Subclass_2:0x105b57ce0>This error is on the example itself, not the application code. Is there a reference to current_member in the spec itself?> /Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/ > test_process.rb:511:in `method_missing'' > /Users/damselem/Documents/Harvard/WebDev/hv_club/spec/controllers/ > people_controller_spec.rb:21: > > Finished in 0.543299 seconds > > 23 examples, 1 failure > > which it seems to be available when using devise: > http://github.com/plataformatec/devise/tree/v1.0.8 . Any idea?>>> I am not a very experienced Rails >>> developer and I tried different things like: >> >>> 13 before :each do >>> 14 # @member = Factory.create(:member) >>> 15 request.env[''warden''].stub(:authenticate!) { double(Member) } >>> 16 sign_in @member >>> 17 @person = Person.new >>> 18 end >> >>> which throws this error: >> >>> RuntimeError in ''PeopleController Methods should render form for a new >>> person on GET people#new'' >>> Could not find a valid mapping for >>> /Library/Ruby/Gems/1.8/gems/devise-1.0.8/lib/devise/mapping.rb:49:in >>> `find_scope!'' >>> /Library/Ruby/Gems/1.8/gems/devise-1.0.8/lib/devise/test_helpers.rb: >>> 71:in `sign_in'' >>> /Users/damselem/Documents/Harvard/WebDev/hv_club/spec/controllers/ >>> people_controller_spec.rb:16: >> >>> Finished in 0.437813 seconds >> >>> 23 examples, 1 failure >> >>> Thanks David, and sorry for asking too much about this issue. >> >> _______________________________________________ >> rspec-users mailing list >> rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users
Daniel Salmeron Amselem
2010-Jul-10 20:38 UTC
[rspec-users] Devise: session variable is empty on session_serializer.rb#store
You''re right David, my fault. Than you very much for all your help. On Jul 10, 4:32?pm, David Chelimsky <dchelim... at gmail.com> wrote:> On Jul 10, 2010, at 3:21 PM, Daniel Salmeron Amselem wrote: > > > > > > > On Jul 10, 3:53 pm, David Chelimsky <dchelim... at gmail.com> wrote: > >> On Jul 10, 2010, at 2:45 PM, Daniel Salmeron Amselem wrote: > >>> On Jul 10, 2:31 pm, David Chelimsky <dchelim... at gmail.com> wrote: > >>>> On Jul 10, 2010, at 1:26 PM, Daniel Salmeron Amselem wrote: > > >>>>> On Jul 9, 2:45 pm, Daniel Salmeron Amselem <daniel.amse... at 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: "member2 at 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 > >>> Thanks David, but could you explain me how should I use this before do > >>> block in order to sign in an user? > > >> That''s all that''s in the before. It effectively signs in the user. If you have a specific user you want to use, you can do > > >> user = Factory(:user) > >> ? request.env[''warden''].stub(:authenticate!) { user } > > Oh, I tried that too, but then current_member doesn''t work.... > > > 1) > > NameError in ''PeopleController Methods should render form for a new > > person on GET people#new'' > > undefined local variable or method `current_member'' for > > #<Spec::Rails::Example::ControllerExampleGroup::Subclass_2::Subclass_2:0x10 5b57ce0> > > This error is on the example itself, not the application code. Is there a reference to current_member in the spec itself? > > > > > > > /Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/ > > test_process.rb:511:in `method_missing'' > > /Users/damselem/Documents/Harvard/WebDev/hv_club/spec/controllers/ > > people_controller_spec.rb:21: > > > Finished in 0.543299 seconds > > > 23 examples, 1 failure > > > which it seems to be available when using devise: > >http://github.com/plataformatec/devise/tree/v1.0.8. Any idea? > >>> I am not a very experienced Rails > >>> developer and I tried different things like: > > >>> 13 ? ?before :each do > >>> 14 ? ? ?# @member = Factory.create(:member) > >>> 15 ? ? ?request.env[''warden''].stub(:authenticate!) { double(Member) } > >>> 16 ? ? ?sign_in @member > >>> 17 ? ? ?@person = Person.new > >>> 18 ? ?end > > >>> which throws this error: > > >>> RuntimeError in ''PeopleController Methods should render form for a new > >>> person on GET people#new'' > >>> Could not find a valid mapping for > >>> /Library/Ruby/Gems/1.8/gems/devise-1.0.8/lib/devise/mapping.rb:49:in > >>> `find_scope!'' > >>> /Library/Ruby/Gems/1.8/gems/devise-1.0.8/lib/devise/test_helpers.rb: > >>> 71:in `sign_in'' > >>> /Users/damselem/Documents/Harvard/WebDev/hv_club/spec/controllers/ > >>> people_controller_spec.rb:16: > > >>> Finished in 0.437813 seconds > > >>> 23 examples, 1 failure > > >>> Thanks David, and sorry for asking too much about this issue. > > >> _______________________________________________ > >> rspec-users mailing list > >> rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > > rspec-users mailing list > > rspec-us... at rubyforge.org > >http://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > rspec-users mailing list > rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
David Chelimsky
2010-Jul-10 20:47 UTC
[rspec-users] Devise: session variable is empty on session_serializer.rb#store
On Jul 10, 2010, at 3:38 PM, Daniel Salmeron Amselem wrote:> You''re right David, my fault. Than you very much for all your help.You got it working then?> On Jul 10, 4:32 pm, David Chelimsky <dchelim... at gmail.com> wrote: >> On Jul 10, 2010, at 3:21 PM, Daniel Salmeron Amselem wrote: >>> On Jul 10, 3:53 pm, David Chelimsky <dchelim... at gmail.com> wrote: >>>> On Jul 10, 2010, at 2:45 PM, Daniel Salmeron Amselem wrote: >>>>> On Jul 10, 2:31 pm, David Chelimsky <dchelim... at gmail.com> wrote: >>>>>> On Jul 10, 2010, at 1:26 PM, Daniel Salmeron Amselem wrote: >> >>>>>>> On Jul 9, 2:45 pm, Daniel Salmeron Amselem <daniel.amse... at 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: "member2 at 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 >>>>> Thanks David, but could you explain me how should I use this before do >>>>> block in order to sign in an user? >> >>>> That''s all that''s in the before. It effectively signs in the user. If you have a specific user you want to use, you can do >> >>>> user = Factory(:user) >>>> request.env[''warden''].stub(:authenticate!) { user } >>> Oh, I tried that too, but then current_member doesn''t work.... >> >>> 1) >>> NameError in ''PeopleController Methods should render form for a new >>> person on GET people#new'' >>> undefined local variable or method `current_member'' for >>> #<Spec::Rails::Example::ControllerExampleGroup::Subclass_2::Subclass_2:0x10 5b57ce0> >> >> This error is on the example itself, not the application code. Is there a reference to current_member in the spec itself? >> >> >> >> >> >>> /Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/ >>> test_process.rb:511:in `method_missing'' >>> /Users/damselem/Documents/Harvard/WebDev/hv_club/spec/controllers/ >>> people_controller_spec.rb:21: >> >>> Finished in 0.543299 seconds >> >>> 23 examples, 1 failure >> >>> which it seems to be available when using devise: >>> http://github.com/plataformatec/devise/tree/v1.0.8. Any idea? >>>>> I am not a very experienced Rails >>>>> developer and I tried different things like: >> >>>>> 13 before :each do >>>>> 14 # @member = Factory.create(:member) >>>>> 15 request.env[''warden''].stub(:authenticate!) { double(Member) } >>>>> 16 sign_in @member >>>>> 17 @person = Person.new >>>>> 18 end >> >>>>> which throws this error: >> >>>>> RuntimeError in ''PeopleController Methods should render form for a new >>>>> person on GET people#new'' >>>>> Could not find a valid mapping for >>>>> /Library/Ruby/Gems/1.8/gems/devise-1.0.8/lib/devise/mapping.rb:49:in >>>>> `find_scope!'' >>>>> /Library/Ruby/Gems/1.8/gems/devise-1.0.8/lib/devise/test_helpers.rb: >>>>> 71:in `sign_in'' >>>>> /Users/damselem/Documents/Harvard/WebDev/hv_club/spec/controllers/ >>>>> people_controller_spec.rb:16: >> >>>>> Finished in 0.437813 seconds >> >>>>> 23 examples, 1 failure >> >>>>> Thanks David, and sorry for asking too much about this issue. >> >>>> _______________________________________________ >>>> rspec-users mailing list >>>> rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users >>> _______________________________________________ >>> rspec-users mailing list >>> rspec-us... at rubyforge.org >>> http://rubyforge.org/mailman/listinfo/rspec-users >> >> _______________________________________________ >> rspec-users mailing list >> rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users
Daniel Salmeron Amselem
2010-Jul-10 20:53 UTC
[rspec-users] Devise: session variable is empty on session_serializer.rb#store
Yep. I just changed current_member by @member, and it works now. Well, it''s now asking me to create the "new" method which is what I expected to receive. Thanks, On Jul 10, 4:47?pm, David Chelimsky <dchelim... at gmail.com> wrote:> On Jul 10, 2010, at 3:38 PM, Daniel Salmeron Amselem wrote: > > > You''re right David, my fault. Than you very much for all your help. > > You got it working then? > > > > > > > On Jul 10, 4:32 pm, David Chelimsky <dchelim... at gmail.com> wrote: > >> On Jul 10, 2010, at 3:21 PM, Daniel Salmeron Amselem wrote: > >>> On Jul 10, 3:53 pm, David Chelimsky <dchelim... at gmail.com> wrote: > >>>> On Jul 10, 2010, at 2:45 PM, Daniel Salmeron Amselem wrote: > >>>>> On Jul 10, 2:31 pm, David Chelimsky <dchelim... at gmail.com> wrote: > >>>>>> On Jul 10, 2010, at 1:26 PM, Daniel Salmeron Amselem wrote: > > >>>>>>> On Jul 9, 2:45 pm, Daniel Salmeron Amselem <daniel.amse... at 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: "member2 at 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 > >>>>> Thanks David, but could you explain me how should I use this before do > >>>>> block in order to sign in an user? > > >>>> That''s all that''s in the before. It effectively signs in the user. If you have a specific user you want to use, you can do > > >>>> user = Factory(:user) > >>>> ? request.env[''warden''].stub(:authenticate!) { user } > >>> Oh, I tried that too, but then current_member doesn''t work.... > > >>> 1) > >>> NameError in ''PeopleController Methods should render form for a new > >>> person on GET people#new'' > >>> undefined local variable or method `current_member'' for > >>> #<Spec::Rails::Example::ControllerExampleGroup::Subclass_2::Subclass_2:0x10 5b57ce0> > > >> This error is on the example itself, not the application code. Is there a reference to current_member in the spec itself? > > >>> /Library/Ruby/Gems/1.8/gems/actionpack-2.3.8/lib/action_controller/ > >>> test_process.rb:511:in `method_missing'' > >>> /Users/damselem/Documents/Harvard/WebDev/hv_club/spec/controllers/ > >>> people_controller_spec.rb:21: > > >>> Finished in 0.543299 seconds > > >>> 23 examples, 1 failure > > >>> which it seems to be available when using devise: > >>>http://github.com/plataformatec/devise/tree/v1.0.8. Any idea? > >>>>> I am not a very experienced Rails > >>>>> developer and I tried different things like: > > >>>>> 13 ? ?before :each do > >>>>> 14 ? ? ?# @member = Factory.create(:member) > >>>>> 15 ? ? ?request.env[''warden''].stub(:authenticate!) { double(Member) } > >>>>> 16 ? ? ?sign_in @member > >>>>> 17 ? ? ?@person = Person.new > >>>>> 18 ? ?end > > >>>>> which throws this error: > > >>>>> RuntimeError in ''PeopleController Methods should render form for a new > >>>>> person on GET people#new'' > >>>>> Could not find a valid mapping for > >>>>> /Library/Ruby/Gems/1.8/gems/devise-1.0.8/lib/devise/mapping.rb:49:in > >>>>> `find_scope!'' > >>>>> /Library/Ruby/Gems/1.8/gems/devise-1.0.8/lib/devise/test_helpers.rb: > >>>>> 71:in `sign_in'' > >>>>> /Users/damselem/Documents/Harvard/WebDev/hv_club/spec/controllers/ > >>>>> people_controller_spec.rb:16: > > >>>>> Finished in 0.437813 seconds > > >>>>> 23 examples, 1 failure > > >>>>> Thanks David, and sorry for asking too much about this issue. > > >>>> _______________________________________________ > >>>> rspec-users mailing list > >>>> rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users > >>> _______________________________________________ > >>> rspec-users mailing list > >>> rspec-us... at rubyforge.org > >>>http://rubyforge.org/mailman/listinfo/rspec-users > > >> _______________________________________________ > >> rspec-users mailing list > >> rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > > rspec-users mailing list > > rspec-us... at rubyforge.org > >http://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > rspec-users mailing list > rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users