私はこれを自分のテストで持っています
Project.should_receive(:find).with(@project).and_return(@project)
しかし、オブジェクトがそのメソッド呼び出しを2回受け取ると、
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)
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-counts under受信カウント
それが役立つことを願っています=)
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)
should_receive
とは対照的に、any_instance
は、クラスが指定された回数メッセージを受信することを想定しています。
一方、any_instance
は通常、メソッドのスタブ化に使用されます。
したがって、最初のケースはテストしたいという期待であり、2番目のケースはメソッドを通過して次の行に進んでいるので、先に進みます。
@JaredBeckは指摘しました。 any_instance
呼び出しで解決策が機能しませんでした。
どのインスタンスでも、should_receiveの代わりにスタブを使用することになりました。
Project.any_instance.stub(:some_method).and_return("value")
これはすべての場合に機能します。時の。