I have three models (users, issues, retailers) and three corresponding controllers. In functional tests for all three controllers, I have the same problems: * Creating a record which should work, fails in the functional test. * Updating a record which should fail (invalid) succeeds (and therefore the test fails.) Other tests of these actions (e.g. a valid update, an invalid creation) work as expected. I am unable to recreate the problem in the console with the same data, even when using the test environment. I would suspect a bug in the controllers except that all three functional tests fail in the same way. Here''s a sample with users: def create # Creates a user with admin role @user = User.new(params[:user]) @user.role = "Admin" if @user.save # Tests never reach this code flash[:notice] = "User successfully created" redirect_to :action => ''show'', :id => @user.id else flash[:warning] = "Please try again." render :action => ''new'' end end and the test is... def test_create # Supposed to succeed, but fails. old = User.count post :create, {:username => "testuser", :password => ''secret'', :password_confirmation => ''secret'', :email => ''test-hcDgGtZH8xNBDgjK7y7TUQ@public.gmane.org''}, {:user => users(:admin1)} # Need an admin user in the session to allow this # n.b. there is a validation to check for presence of username, password, and email; also to check pw confirmation assert_not_nil assigns(:user) assert assigns(:user).is_admin? assert_response :redirect assert_redirected_to :action => "show", :id => assigns(:user).id assert_equal "User successfully created", flash[:notice] assert_equal old + 1, User.count end The test fails at the assert_response :redirect, so it''s the @user.save which isn''t behaving as expected. The same thing happens in two other controllers, with two other models. Any ideas? pjm --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
pjmorse wrote:> > def create # Creates a user with admin role > @user = User.new(params[:user]) > @user.role = "Admin" > > if @user.save > # Tests never reach this code > flash[:notice] = "User successfully created" > redirect_to :action => ''show'', :id => @user.id > else > flash[:warning] = "Please try again." > render :action => ''new'' > end > end > > and the test is... > > def test_create # Supposed to succeed, but fails. > old = User.count > post :create, {:username => "testuser", :password => > ''secret'', :password_confirmation => ''secret'', :email => > ''test-hcDgGtZH8xNBDgjK7y7TUQ@public.gmane.org''}, {:user => users(:admin1)} # Need an admin user in > the session to allow this > # n.b. there is a validation to check for presence of username,> Any ideas? > > pjmI think your error is before the save, in the test case, your :user is not passing in the required fields to populate a new user. Here is what you can do to verify this. 1) sudo gem install ruby-debug 2) insert: "debugger" a the top of your controller''s create method 3) run: rdebug test/script/<test case name> [<test name>] # you are now in the debugger..> cont # debugger starts on first line of the file, hit cont to go to your bp > irb # when you hit your bpirb> @user hth ilan -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
pjmorse wrote:> if @user.save > # Tests never reach this codeTemporarily change that to @user.save! and read the error diagnostic? --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Phlip wrote:> pjmorse wrote: > >> if @user.save >> # Tests never reach this code > > Temporarily change that to @user.save! and read the error diagnostic?no need to even do that.. just type @user and see what the debugger gives you.. I believe that your password fields will not be set which therefore failed the validation tests in your model hth ilan -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Ilan, thanks for the ruby-debug tip, I''ll need that one of these days. For this one, I followed Phlip''s suggestion and switched to save!, which confirmed Ilan''s suggestion that the parameters were not correct. I needed to set the params to create a user object, e.g. post :create, {:user => {:username => "testuser", :password => ''secret'', :password_confirmation => ''secret'', :email => ''test-hcDgGtZH8xNBDgjK7y7TUQ@public.gmane.org''}}, {:user => users(:admin1)} ...not sure yet how this will work with the update bug, but it should fix the save bug across all three tests. Thanks! On Feb 22, 4:43 pm, Phlip <phlip2...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> pjmorse wrote: > > if @user.save > > # Tests never reach this code > > Temporarily change that to @user.save! and read the error diagnostic?--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---