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
-~----------~----~----~----~------~----~------~--~---