How to test the assignment of current_user

Hello,

This could be rephrased as – How to test calls of special assigment
(setter) methods?

I am trying to test the assigmnet of a user object to the
current_user=(new_user) method. It is part of an authentication process
and
finally the object is assigned to the session through this method. I
have
tried:

controller.should_receive(:current_user=).with(@user)
post :create, @params

And the output is:

expected :current_user= with (#<User id: 605 <… snip …> ) once, but
received it 0 times

I do not understand, since current_user=(new_user) is actually being
called
by the controller:

def create

current_user = @user

end

Why’s that?

Thanks,

Marcelo.

If current_user is an instance variable (as if you did attr_accessor
:current_user), you should try:
@current_user = @user

If not, you should try invoking with self:
self.current_user = @user

because ruby is creating a local variable named current_user instead of
invoking #current_user=. When you do call self, which refers to the
object
itself, it will use normal method lookup, that will find your
#current_user=.

On Mon, Jun 7, 2010 at 6:43 PM, Marcelo de Moraes S.
<[email protected]

Oh yes, forgot to add that, if you do self.current_user = user, it will
call
your mock as expected.

Sorry for the multitude of emails.

2010/6/7 Vinícius Baggio F. [email protected]

Thanks Vinícius :wink:

2010/6/7 Vinícius Baggio F. [email protected]