Ich kann Mocks nicht dazu bringen, mit onCall und erwarteten Argumenten zu arbeiten.
Der folgende Code gibt Object #<Object> has no method 'withExactArgs'
var mock = sinon.mock();
mock.exactly(2);
mock.onCall(0).withExactArgs("arg1", "arg2").returns("foo");
mock.verify();
Die Methode withExactArgs
ist in der Stub-Eigenschaft verfügbar: mock.onCall(0).stub.withExactArguments
.
Ist das beabsichtigtes Verhalten oder ein Bug?
Es scheint auch nicht mit .stub zu funktionieren. Ich erhalte eine Fehlermeldung, die besagt, dass die Methode mit den falschen Argumenten aufgerufen wurde. Zeigt die Argumente des ersten Aufrufs, aber die Anforderungen des zweiten. Als ob es den onCall(0) verwirft.
var mock = sinon.mock();
mock.exactly(2);
mock.onFirstCall().stub.withExactArgs("bar1", "bar2").returns("bar");
mock.onSecondCall().stub.withExactArgs("foo1", "foo2").returns("foo");
mock("bar1", "bar2");
mock("foo1", "foo2");
mock.verify();
Gibt ExpectationError: Anonymous mock received wrong arguments ["bar1", "bar2"], expected ["foo1", "foo2"]
Es ist weder beabsichtigtes Verhalten noch ein Fehler. Sie vermischen Metaphern. onCall
und withArgs
sind beides Möglichkeiten, einen Methodenaufruf zu identifizieren.
// So either,
mock.onCall(0).returns("foo")
// OR
mock.withArgs("arg1", "arg2").returns("foo")
// but not both
Ihr zweites Beispiel ist aus dem gleichen Grund fehlerhaft und sollte wahrscheinlich mit einem Stub neu geschrieben werden.
var stub = sinon.stub();
stub.withArgs("bar1", "bar2").returns("bar");
stub.withArgs("foo1", "foo2").returns("foo");
stub("bar1", "bar2");
stub("foo1", "foo2");
sinon.assert.calledTwice(stub);
// verify the 2 calls
sinon.assert.calledWithExactly(stub, "bar1", "bar2");
sinon.assert.calledWithExactly(stub, "foo1", "foo2");
// verify the 2 calls in order
sinon.assert.callOrder(
stub.withArgs("bar1", "bar2"),
stub.withArgs("foo1", "foo2")
);
Leider gibt es kein withExactArgs
auf Stub
.
Jedoch...
Sie können einzelne Aufrufe an einen Stub identifizieren, auch wenn sie mehrmals mit denselben Argumenten aufgerufen werden. Zum Beispiel
stub.withArgs("foo")
.onCall(0).returns("a")
.onCall(1).returns("b");
stub.withArgs("bar")
.onCall(0).returns("c")
.onCall(1).returns("d");
Wenn das hilft?
@mantoni Ich denke, dieses Problem kann geschlossen werden
Hilfreichster Kommentar
Es ist weder beabsichtigtes Verhalten noch ein Fehler. Sie vermischen Metaphern.
onCall
undwithArgs
sind beides Möglichkeiten, einen Methodenaufruf zu identifizieren.Ihr zweites Beispiel ist aus dem gleichen Grund fehlerhaft und sollte wahrscheinlich mit einem Stub neu geschrieben werden.
Leider gibt es kein
withExactArgs
aufStub
.