Beim Schreiben von RSpec-Tests schreibe ich viel Code, der so aussieht, um sicherzustellen, dass während der Ausführung eines Tests eine Methode aufgerufen wurde (aus Gründen der Argumentation sagen wir einfach, dass ich den Status nicht wirklich abfragen kann des Objekts nach dem Aufruf, da die Operation, die die Methode ausführt, die Wirkung von) nicht leicht zu erkennen ist.
describe "#foo"
it "should call 'bar' with appropriate arguments" do
called_bar = false
subject.stub(:bar).with("an argument I want") { called_bar = true }
subject.foo
expect(called_bar).to be_true
end
end
Was ich wissen möchte ist: Gibt es eine schönere Syntax als diese? Vermisse ich eine funky RSpec-Attraktivität, die den obigen Code auf ein paar Zeilen reduzieren würde? should_receive
klingt so, als ob es das tun sollte, aber weiter zu lesen klingt so, als ob es nicht genau das ist, was es tut.
ruby-on-rails
ruby
rspec
Mikey Hogarth
quelle
quelle
should_receive
, also dachte ich, diese Frage würde helfen.Antworten:
quelle
called_bar
. Das war nur ein Flag, um sicherzustellen, dass die Methode aufgerufen wurde, aber mitexpect(...).to receive(...)
Ihnen wird dies bereits behandelt. Es ist klarer und semantischerIn der neuen
rspec
expect
Syntax wäre dies:quelle
Das Folgende sollte funktionieren
Dokumentation: https://github.com/rspec/rspec-mocks#expecting-arguments
quelle
have_received
(der nachträgliche "Spion " -Ansatz), nichthas_received
, was nicht Teil einer Version von RSpec ist, die ich kenne.Um die RSpec ~> 3.1-Syntax und
rubocop-rspec
die Standardoption für Regeln vollständig einzuhalten, können Sie FolgendesRSpec/MessageSpies
tunspy
:Wenn Sie nicht rubocop-rspec oder eine nicht standardmäßige Option verwenden. Natürlich können Sie RSpec 3 standardmäßig mit erwarten verwenden.
quelle