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

Reply via email to