2013-01-17 9 views
9

Ich möchte Mocks in rspec Tests wie.Rspec Mocks any_instance mit genau (n) mal

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

aber ich erhalte eine Fehlermeldung wie:

'Die Meldung "speichern" empfangen wurde durch < #Object> aber bereits von < #Object> empfangen worden'

Temporary ich benutze Stummel aber für Genauigkeit wollen Mocks

+0

möglich Duplikat [How to say "any \ _instance" "_receive \ sollte" eine beliebige Anzahl von mal in RSpec] (http://stackoverflow.com/questions/9800992/how-to-say-any-instance-should-receive-any-number-of-times-in-rspec) – SztupY

Antwort

19

Die documentation von any_instance.should_receive verwenden ist:

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. 

So haben Sie festgelegt, dass genau ein Objekt sollte den save Anruf zweimal erhalten, und nicht, dass zwei Objekte sollten den save Anruf einmal erhalten.

Wenn Sie die Anrufe von verschiedenen Instanzen getan zählen möchten, müssen Sie sein müssen creative wie:

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

Ich möchte zwei verschiedene Objekte zu sollte_receive (: speichern) in einem Beispiel. Eigentlich erstelle ich 'n' neues Objekt durch Schleifen und möchte es testen, um die Speichermethode zu treffen. Entschuldigung für mein schlechtes Englisch. –

+0

Sie müssen dann mein zweites Beispiel verwenden – SztupY