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...@gmail.com> wrote: >> On Jul 10, 2010, at 3:21 PM, Daniel Salmeron Amselem wrote: >>> On Jul 10, 3:53 pm, David Chelimsky <dchelim...@gmail.com> wrote: >>>> On Jul 10, 2010, at 2:45 PM, Daniel Salmeron Amselem wrote: >>>>> On Jul 10, 2:31 pm, David Chelimsky <dchelim...@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...@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 >>>>> 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...@rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users >>> _______________________________________________ >>> rspec-users mailing list >>> rspec-us...@rubyforge.org >>> http://rubyforge.org/mailman/listinfo/rspec-users >> >> _______________________________________________ >> rspec-users mailing list >> rspec-us...@rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users > _______________________________________________ > rspec-users mailing list > rspec-users@rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users _______________________________________________ rspec-users mailing list rspec-users@rubyforge.org http://rubyforge.org/mailman/listinfo/rspec-users