Search code examples
ruby-on-railsrspec

How to say "should_receive" more times in RSpec


I have this in my test

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

but when object receive that method call two times, I have to do

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

Is there any way how to say something like

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

Solution

  • 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