2013-07-10 17 views
67

Das folgende Stück Code zu erhalten wie erwartet funktioniert:Object.any_instance should_receive vs erwarten()

Object.any_instance.should_receive(:subscribe) 

Aber wenn die neue rspec Erwartung mit funktioniert es nicht:

expect(Object.any_instance).to receive(:subscribe) 

Der Fehler ist:

expected: 1 time with any arguments 
received: 0 times with any arguments 

Wie kann ich diese Arbeit mit expect() erhalten?

Antwort

141

Es gibt jetzt eine nicht sehr gut dokumentierte Methode namens expect_any_instance_of, die den Sonderfall behandelt. Sie sollten verwenden:

expect_any_instance_of(Object).to receive(:subscribe) 

Google expect_any_instance_of für weitere Informationen.

+0

1 für „nicht sehr gut dokumentiert“. Immer noch der Fall. http://www.rubydoc.info/gems/rspec-mocks/RSpec/Mocks/ExampleMethods:expect_any_instance_of – johngraham

+0

Ich habe mit worden 'allow_any_instance_of'. Ist es ein Alias ​​dieser Methode? – rubyprince

+0

@rubyprince Sie unterscheiden sich durch das Stub-Verhalten der Allow-Methoden und erwarten, dass Methoden auf ihr Verhalten getestet werden. Zum Beispiel, 'allow (my_obj) .to zu erhalten (: method_name) .and_return (true)' stubs 'my_obj.method_name()' also, wenn es im Test aufgerufen wird, gibt es einfach 'true' zurück. 'expect (my_obj) .to receive (: Methodenname) .and_recturn (true)' ändert kein Verhalten, sondern legt eine Testerwartung fest, die fehlschlägt, wenn 'my_obj.method_name()' nicht später in der aufgerufen wird Test oder nicht wahr zurück. – Saigo