摩卡:你如何设置实例方法的期望?

时间:2009-05-27 05:09:59

标签: ruby-on-rails ruby mocha

假设这个红宝石代码:

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方法进行存根/模拟,因为将来可能会改变用户的实现方式)

干杯

2 个答案:

答案 0 :(得分:18)

对于可能偶然发现这一点的其他人,我在另一篇文章中找到了答案,其中将RR视为嘲弄框架......在摩卡你可以这样做:

User.any_instance.expects(:save).never()

答案 1 :(得分:4)

或者你可以做类似

的事情
user = mock
User.expects(:find).returns user
user.expects(:save).never