web-dev-qa-db-ja.com

RSpecを使用してオブジェクトに複数のshould_receive期待値を追加するにはどうすればよいですか?

私のRailsコントローラーでは、同じモデルクラスの複数のインスタンスを作成しています。RSpecの期待値をいくつか追加して、正しいパラメーターで正しい数を作成していることをテストできるようにします。 、これが私のスペックにあるものです:

 Bandmate.should_receive(:create).with(:band_id => @ band.id、:user_id => @ user.id、:position_id => 1、:is_leader => true)
 Bandmate.should_receive(:create).with(:band_id => @ band.id、:user_id => "2222"、:position_id => 2)
 Bandmate.should_receive(:create).with(:band_id => @ band.id、:user_id => "3333"、:position_id => 3)
 Bandmate.should_receive(:create).with(:band_id => @ band.id、:user_id => " 4444 "、:position_id => 4)

Bandmateクラスには1つの「should_receive」期待値しか設定できないように見えるため、これが問題を引き起こしています。したがって、例を実行すると、次のエラーが発生します。

 Spec :: Mocks :: MockExpectationError in'BandsControllerは、作成時にすべてのバンドメイトを作成する必要があります。 :position_id => 1、:is_leader => true})が、({:band_id => 1014、:user_id => "2222"、:position_id => "2"})
で受信しました。

これらは作成する2番目の呼び出しの正しいパラメーターですが、RSpecは間違ったパラメーターに対してテストしています。

複数の異なる呼び出しを許可するようにshould_receiveの期待値を設定する方法を知っている人はいますか?

31
Micah

複数の期待はまったく問題ではありません。あなたが直面しているのは、順序付けられていない期待に対する特定の引数を考えると、順序付けの問題です。注文の予想の詳細については、 このページ を確認してください。

短編小説は、それぞれの期待の最後に.orderedを追加する必要があるということです。

36
James Baker