【问题标题】:How to say "should_receive" more times in RSpec如何在 RSpec 中多次说“should_receive”
【发布时间】:2010-11-22 15:10:21
【问题描述】:

我的测试中有这个

Project.should_receive(:find).with(@project).and_return(@project)

但是当对象收到两次该方法调用时,我必须这样做

Project.should_receive(:find).with(@project).and_return(@project)
Project.should_receive(:find).with(@project).and_return(@project)

有什么办法可以说

Project.should_receive(:find).with(@project).and_return(@project).times(2)

【问题讨论】:

    标签: ruby-on-rails rspec


    【解决方案1】:

    这是过时的。请查看下方Uri's answer

    2次:

    Project.should_receive(:find).twice.with(@project).and_return(@project)
    

    正好 n 次:

    Project.should_receive(:find).exactly(n).times.with(@project).and_return(@project)
    

    至少 n 次:

    Project.should_receive(:msg).at_least(n).times.with(@project).and_return(@project)
    

    https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-countshttps://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-counts接收计数

    下的更多详细信息

    希望对你有帮助 =)

    【讨论】:

    • 似乎这不适用于any_instance
    • @YoLudke 我不知道
    • 应该使用Uri's answer中提到的新语法。
    【解决方案2】:

    rspec 的新 expect 语法如下所示:

    2次:

    expect(Project).to receive(:find).twice.with(@project).and_return(@project)
    

    正好 n 次:

    expect(Project).to receive(:find).exactly(n).times.with(@project).and_return(@project)
    

    至少 n 次:

    expect(Project).to receive(:msg).at_least(n).times.with(@project).and_return(@project)
    

    【讨论】:

    • have_received 语法也有效。 expect(Project).to have_received(:find).exactly(n).times
    【解决方案3】:

    @JaredBeck 指出。该解决方案在 any_instance 通话中对我不起作用。

    对于任何情况,我最终都使用 stub 而不是 should_receive。

    Project.any_instance.stub(:some_method).and_return("value")
    

    这适用于任何否。不过。

    【解决方案4】:

    should_receiveany_instance 不同,期望类接收指定次数的消息。

    另一方面,any_instance 通常用于存根方法。

    所以第一种情况是我们想要测试的期望,而第二种情况是通过一个方法到下一行,以便我们继续前进。

    【讨论】:

    • Drenmi 感谢您花时间在我将近一年前添加的帖子中添加几个逗号...看起来答案的技术方面没有任何变化...你为什么要对我投反对票...?
    猜你喜欢
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    相关资源
    最近更新 更多