wake-up-neo.com

RSpec: Wie teste ich, ob eine Methode aufgerufen wurde?

Wenn ich RSpec-Tests schreibe, schreibe ich eine Menge Code, der so aussieht, um sicherzustellen, dass eine Methode während der Ausführung eines Tests aufgerufen wurde des Objekts nach dem Aufruf, da die von der Methode ausgeführte Operation den Effekt von) nicht leicht erkennen lässt.

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? Fehlt mir ein bisschen RSpec, das den obigen Code auf ein paar Zeilen reduziert? should_receive hört sich so an, als ob es das tun sollte, aber wenn man weiter liest, hört es sich so an, als ob es nicht genau das ist, was es tut.

100
Mikey Hogarth
it "should call 'bar' with appropriate arguments" do
  expect(subject).to receive(:bar).with("an argument I want")
  subject.foo
end
127
wacko

In der neuen rspecexpect Syntax wäre dies:

expect(subject).to receive(:bar).with("an argument I want")
98
Uri Agassi

Das Folgende sollte funktionieren

describe "#foo"
  it "should call 'bar' with appropriate arguments" do
     subject.stub(:bar)
     subject.foo
     expect(subject).to have_received(:bar).with("Invalid number of arguments")
  end
end

Dokumentation: https://github.com/rspec/rspec-mocks#expecting-arguments

33
bjhaid