How to fix assigns(:user) on controller test

Hi everyon,
Thank you for your any help!
I did the controller test, but there is a problem where run the test.
On controller.rb:

def change_password
user = current_user
if User.authenticate(user.login, params[:old_password])
if (params[:password] == params[:password_confirmation])
user.password_confirmation = params[:password_confirmation]
user.password = params[:password]
if user.save
result = _(“Password changed!”)
reset_current_user(user.id)
else
(“Could not save change, please try again.”)
end
else
result = _(“Your passwords do not match.”)
@old_password = params[:old_password]
end
else
result = _(“Your old password is incorrect.”)
end
end

the controller_test.rb:

def test_should_allow_password_change
post :change_password, { :old_password => ‘123’, :password =>
‘newpassword’, :password_confirmation => ‘newpassword’},
{:user_id=>users(:user1).id}
assert_equal ‘newpassword’, assigns(:user).password
end

when I run this test, There always said,
NoMetodError: You have a ni object when you didn’t expect it:
the error occurred while evaluating nil.password.

why did happen that? I looked around but I can’t find the way to solve
it.
Please help1
Thanks!

This problem is nobody kenow how to solved?
I have try to use:
assert_equal ‘newpassword’, assigns(‘user’).password
assert_equal ‘newpassword’, assigns[:user].password
assert_equal ‘newpassword’, assigns[‘user’].password

but there is same thing. I don’t know why?
please help!

OnRails wrote:

    user.password = params[:password]
else
assert_equal 'newpassword', assigns(:user).password

end

when I run this test, There always said,
NoMetodError: You have a ni object when you didn’t expect it:
the error occurred while evaluating nil.password.

why did happen that? I looked around but I can’t find the way to solve
it.

Assigns only works for instance variables. You will have to use:

@user = current_user

if you want access to the variable in the test. Though I believe you
shouldn’t poke around in the internals of your controller action from
the test, rather test the updated user from the database, like:

assert_equal ‘newpassword’, users(:user1).reload.password


Cheers,

  • Jacob A.

agree Jacob A…

but , it’s looks like ,functional is not very usefull.

2007/9/9, Jacob A. [email protected]:

Thank you very much, I think so. I’'ll try it.