33

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 の「BandsController は、作成時にすべてのバンドメイトを作成する必要があります」
モック 'クラス' は :create with ({:band_id=>1014, :user_id=>999, :position_id=>1, :is_leader=>true}) を期待していましたが、({:band_id=>1014, :user_id=) で受け取りました>"2222", :position_id="2"})

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

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

4

2 に答える 2

40

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

簡単に言うと.ordered、それぞれの期待の最後に追加する必要があります。

于 2008-10-29T23:05:36.393 に答える
-3

モック受信カウント

my_mock.should_receive(:sym).once
my_mock.should_receive(:sym).2回
my_mock.should_receive(:sym).exactly(n)
.times my_mock.should_receive(:sym).at_least(:once)
my_mock.should_receive(: sym).at_least(:twice)
my_mock.should_receive(:sym).at_least(n)
.times my_mock.should_receive(:sym).at_most(:once)
my_mock.should_receive(:sym).at_most(:twice)
my_mock. should_receive(:sym).at_most(n)
.times my_mock.should_receive(:sym).any_number_of_times

rspec 2.5 でも動作します。

于 2011-03-03T09:20:02.983 に答える