On 2008-11-05, at 15:02, Ben Mabey wrote:
Hey Nick,
It is generally a bad idea to stub/mock a method on the object you
are verifying the behaviour of. I would recommend a state-based
approach of testing this method as opposed to the interaction-based
one you are pursuing. The reason being is that you want to verify
the behaviour of the object as a whole. How the object uses it's
internal methods and state is none of the code example's business.
Without knowing the other methods on User I don't know the best way
to verify the behavior.. What other methods that deal with the
remember functionality are part of the public API? Assuming it is
an AR model and you have a 'remember_me_until' column you could do
something like:
it 'should remember a user for a period of time' do
user = create_user
user.remember_me_for(1.week)
user.remember_me_until.should == 1.week.from_now.utc
end
Again, using the #remember_me_until method is testing the internal
state of the object but without knowing your other methods I don't
what the better options (if any) are.
HTH,
Ben
Hi Ben. #remember_me is used to keep a user logged in to the website
if they ticked the "Remember me?" checkbox in the login form. It's
only called from one location in the app:
case
when valid_remember_cookie? then @current_user.refresh_token #
keeping same expiry date
when new_cookie_flag then @current_user.remember_me
else @current_user.forget_me
end
So as you suggested, my spec example should probably just be checking
to see that the User instance's "remember_me_until" attribute is set
to an appropriate value.
Thanks!
Nick
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users