Der folgende Code funktioniert wie erwartet:
Object.any_instance.should_receive(:subscribe)
Bei Verwendung der neuen rspec-Erwartung funktioniert dies jedoch 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 dafür sorgen, dass diese Funktion mit "require ()" empfangen wird?
rspec
rspec2
rspec-rails
Calin
quelle
quelle
allow_any_instance_of
. Ist es ein Alias dieser Methode?allow(my_obj).to receive(:method_name).and_return(true)
Stubs:my_obj.method_name()
Wenn es im Test aufgerufen wird, wird es einfach zurückgegebentrue
.expect(my_obj).to receive(:method_name).and_return(true)
ändert kein Verhalten, richtet jedoch eine Testerwartung ein, die fehlschlägt, wennmy_obj.method_name()
sie später im Test nicht aufgerufen wird oder nicht true zurückgibt.Nur ein Heads-up,
expect_any_instance_of
wird laut Jon Rowe (Key Rspec Contributor) nun als veraltetes Verhalten angesehen . Die vorgeschlagene Alternative besteht darin, dieinstance_double
Methode zu verwenden, um eine Scheininstanz Ihrer Klasse zu erstellen und Aufrufe dieser Instanz doppelt zu erwarten, wie in diesem Link beschrieben.Jons Methode wird bevorzugt (da sie als verallgemeinerte Testhilfemethode verwendet werden kann). Wenn Sie dies jedoch verwirrend finden, kann diese Implementierung für Ihren Beispielfall hoffentlich dazu beitragen, die beabsichtigte Methode zu verstehen:
mock_object = instance_double(Object) # create mock instance allow(MyModule::MyClass).to receive(:new).and_return(mock_object) # always return this mock instance when constructor is invoked expect(mock_object).to receive(:subscribe)
Viel Glück! 🙏🏽
quelle