4

假设这个红宝石代码:

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 在给出无效电子邮件时永远不会被调用。例如:

it "should not increment failed login count" do
   User.expects(:save).never()
   User.failed_login!("doesnotexist")
end

此测试当前通过,但当我提供有效的电子邮件地址时它也通过了。

如何使用 Mocha 设置期望值?(或任何其他模拟框架),以便它测试任何用户实例的保存方法永远不会被调用?

(最好不要存根/模拟 find_by_email 方法,因为将来如何获取用户的实现可能会改变)

干杯

4

2 回答 2

20

对于可能偶然发现这一点的其他人,我在另一篇将 RR 作为模拟框架处理的帖子中找到了答案……在 Mocha 中,您可以这样做:

User.any_instance.expects(:save).never()
于 2009-05-27T06:59:00.600 回答
4

或者你可以做类似的事情

user = mock
User.expects(:find).returns user
user.expects(:save).never
于 2009-05-28T19:12:09.213 回答