假设这个红宝石代码:
class User
def self.failed_login!(email)
user = User.find_by_email(email)
if user
user.failed_login_count = user.failed_login_count + 1
user.save
end
end
end
我想编写一个测试,测试在给出无效的电子邮件时永远不会调用user.save。 E.g:
it "should not increment failed login count" do
User.expects(:save).never()
User.failed_login!("doesnotexist")
end
此测试目前已通过,但在我提供有效的电子邮件地址时也会通过。
如何使用Mocha设置期望值? (或任何其他模拟框架),以便它测试任何用户实例的save方法永远不会被调用?
(最好不要对find_by_email方法进行存根/模拟,因为将来可能会改变用户的实现方式)
干杯
答案 0 :(得分:18)
对于可能偶然发现这一点的其他人,我在另一篇文章中找到了答案,其中将RR视为嘲弄框架......在摩卡你可以这样做:
User.any_instance.expects(:save).never()
答案 1 :(得分:4)
或者你可以做类似
的事情user = mock
User.expects(:find).returns user
user.expects(:save).never