2013-01-17 36 views
9

rspecテストでMockを使用したいと思います。正確に(n)回のany_instanceでRspecをモックします

klass.any_instance.should_receive(:save).exactly(2).times.and_return(true) 

はなく、私のようなエラーメッセージが表示されます:

一時的な '< #Objectによって受信された "保存">すでに< #Object>によって受信されたメッセージ'私はスタブを使用しますが、正確さのためにモック

+0

可能重複RSpecの時間](http://stackoverflow.com/questions/9800992/how-to-say-any-instance-should-receive-any-number-of-times-in-rspec) – SztupY

答えて

19

any_instance.should_receivedocumentationを使用したいです。

Use any_instance.should_receive to set an expectation that one (and only one) 
instance of a class receives a message before the example is completed. 

だから、あなたは正確に1つの目的は、2つのオブジェクトがsaveコール1回受ける必要があることをsaveコールを2回受け、そしてべきではないことを指定しています。

あなたは別のインスタンスによって行わ通話をカウントしたい場合は、creativeのようなことする必要があります:「任意の数を_receive \すべきである[どのように「任意の\の_INSTANCE」を言うために」の

save_count = 0 
klass.any_instance.stub(:save) { save_count+=1 } 
# run test 
save_count.should == 2 
+0

私は2つの異なるオブジェクトが必要1つの例でshould_receive(:save)。実際には、私はループを介して 'n'の新しいオブジェクトを作成しているとそれをテストしたいセーブメソッドをヒットします。私の悪い英語を申し訳ありません。 –

+0

私の2番目の例を使用する必要があります – SztupY

関連する問題