# How to fix assigns(:user) on controller test

**URL:** <https://www.ruby-forum.com/t/how-to-fix-assigns-user-on-controller-test/114178>\
**Category:** Ruby\
**Created:** [September 9, 2007, 4:48am UTC](https://www.ruby-forum.com/t/how-to-fix-assigns-user-on-controller-test/114178 "2007-09-09T04:48:26Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![zlai](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/b3f665/32.png) [@zlai](https://www.ruby-forum.com/u/zlai)\
**Post date:** [September 9, 2007, 4:48am UTC](https://www.ruby-forum.com/t/how-to-fix-assigns-user-on-controller-test/114178/1 "2007-09-09T04:48:26Z")

</div>

Hi everyon,  
Thank you for your help!  
I did the controller test, but there is a problem when run the test.

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.

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 problem. I don’t know why?  
Please help1  
Thanks!

---

<div class="post-metadata">

**Author:** ![zlai](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/b3f665/32.png) [@zlai](https://www.ruby-forum.com/u/zlai)\
**Post date:** [September 9, 2007, 10:56pm UTC](https://www.ruby-forum.com/t/how-to-fix-assigns-user-on-controller-test/114178/2 "2007-09-09T22:56:37Z")

</div>

James Hunt wrote:

> On 9/8/07, OnRails R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) claimed:
> 
> > 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.
> > 
> > I have try to use:  
> > assert\_equal ‘newpassword’, assigns(‘user’).password  
> > assert\_equal ‘newpassword’, assigns[:user].password  
> > assert\_equal ‘newpassword’, assigns[‘user’].password
> 
> Are you using fixtures for your tests? (I assume you are, from the  
> assigns() usage).
> 
> Can you post the fixtures?
> 
> > Thanks!  
> > You’re welcome

the fixtures file is:  
user1:  
id: 1  
login: testuser1  
user\_name:asb  
password: 123  
created\_at: 2006-04-12 14:30:25  
user2:  
id: 2  
login: testuser2  
user\_name:asb123  
password: 123  
created\_at: 2006-04-12 14:30:25

---

<div class="post-metadata">

**Author:** ![zlai](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/b3f665/32.png) [@zlai](https://www.ruby-forum.com/u/zlai)\
**Post date:** [September 9, 2007, 11:04pm UTC](https://www.ruby-forum.com/t/how-to-fix-assigns-user-on-controller-test/114178/3 "2007-09-09T23:04:14Z")

</div>

On 9/9/07, OnRails R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> user\_name:asb  
> password: 123  
> created\_at: 2006-04-12 14:30:25  
> user2:  
> id: 2  
> login: testuser2  
> user\_name:asb123  
> password: 123  
> created\_at: 2006-04-12 14:30:25

Therein lies your problem. You don’t have a data item in your  
fixture’d database called ‘user’, only ‘user1’ and ‘user2’

Try  
assert\_equal ‘newpassword’, assigns(:user1).password

---

<div class="post-metadata">

**Author:** ![zlai](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/b3f665/32.png) [@zlai](https://www.ruby-forum.com/u/zlai)\
**Post date:** [September 9, 2007, 11:07pm UTC](https://www.ruby-forum.com/t/how-to-fix-assigns-user-on-controller-test/114178/4 "2007-09-09T23:07:14Z")

</div>

On Sep 9, 2007, at 4:56 PM, OnRails R. wrote:

> > > assert\_equal ‘newpassword’, assigns[‘user’].password

But did you try:  
assert\_equal ‘newpassword’, assigns(:user).password

and you actually do assign to @user in the controller, right?

-Rob

Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
removed\_email\_address@domain.invalid

---

<div class="post-metadata">

**Author:** ![zlai](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/b3f665/32.png) [@zlai](https://www.ruby-forum.com/u/zlai)\
**Post date:** [September 9, 2007, 11:44pm UTC](https://www.ruby-forum.com/t/how-to-fix-assigns-user-on-controller-test/114178/5 "2007-09-09T23:44:19Z")

</div>

> But did you try:  
> assert\_equal ‘newpassword’, assigns(:user).password
> 
> and you actually do assign to @user in the controller, right?
> 
> -Rob
> 
> Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
> removed\_email\_address@domain.invalid

I can’t believe I completely missed the point of this post. No more  
posting on \< 3 hours of sleep 😃

---

<div class="post-metadata">

**Author:** ![zlai](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/b3f665/32.png) [@zlai](https://www.ruby-forum.com/u/zlai)\
**Post date:** [September 9, 2007, 9:26am UTC](https://www.ruby-forum.com/t/how-to-fix-assigns-user-on-controller-test/114178/6 "2007-09-09T09:26:33Z")

</div>

On 9/8/07, OnRails R. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) claimed:

> 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.
> 
> I have try to use:  
> assert\_equal ‘newpassword’, assigns(‘user’).password  
> assert\_equal ‘newpassword’, assigns[:user].password  
> assert\_equal ‘newpassword’, assigns[‘user’].password

Are you using fixtures for your tests? (I assume you are, from the  
assigns() usage).

Can you post the fixtures?

> Thanks!  
> You’re welcome
