Mocha:如何设置对实例方法的期望?

发布于 2024-07-21 17:35:39 字数 616 浏览 7 评论 0原文

假设这个 ruby​​ 代码:

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 设置期望? (或任何其他模拟框架),以便它测试任何 User 实例的 save 方法永远不会被调用?

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

干杯

Assume this ruby code:

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

I want to write a test that tests that user.save is never called when an invalid email is given. E.g.:

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

This test currently passes, but it also passes when I provide a valid email address.

How do I set up the expectation using Mocha? (or any other mocking framework) such that it tests the save method of any User instance is never called?

(preferably without stubbing/mocking the find_by_email method, as the implementation of how to get the user might change in the future)

Cheers

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你列表最软的妹 2024-07-28 17:35:39

或者你可以做类似的事情

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

alternatively you could do something like

user = mock
User.expects(:find).returns user
user.expects(:save).never
故人爱我别走 2024-07-28 17:35:39

对于其他可能偶然发现这一点的人,我在另一篇文章中找到了答案,该文章将 RR 作为模拟框架......在 Mocha 中你可以这样做:

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

For others that might have stumbled unto this, I found the answer in another post that was dealing with RR as the mocking framework... in Mocha you can do this:

User.any_instance.expects(:save).never()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文