How to say “should_receive” more times in RSpec

前端 未结 4 700
无人共我
无人共我 2020-12-23 12:47

I have this in my test

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

but when object receive that method call two times

相关标签:
4条回答
  • 2020-12-23 13:25

    should_receive, as opposed to any_instance, expects that the class receives message the specified number of times.

    any_instance on the other hand is generally used for stubbing a method.

    So the first case is an expectation that we would like to test, while the second one is getting past a method to the next line so we can move on.

    0 讨论(0)
  • 2020-12-23 13:32

    This is outdated. Please check Uri's answer below

    for 2 times:

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

    for exactly n times:

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

    for at least n times:

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

    more details at https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/message-expectations/receive-counts under Receive Counts

    Hope it helps =)

    0 讨论(0)
  • 2020-12-23 13:36

    The new expect syntax of rspec will look like this:

    for 2 times:

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

    for exactly n times:

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

    for at least n times:

    expect(Project).to receive(:msg).at_least(n).times.with(@project).and_return(@project)
    
    0 讨论(0)
  • 2020-12-23 13:47

    @JaredBeck pointed out. The solution didn't work for me on any_instance call.

    For any instance i ended up using stub instead of should_receive.

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

    This will work for any no. of times though.

    0 讨论(0)
提交回复
热议问题