Die Geltendmachung einer spezifischen stub-Aufruf erfolgte mit den erforderlichen Argumenten über sinon
Angenommen, Sie testen eine Funktion aufrufen, werden eine Abhängigkeit, die mehrmals mit verschiedenen Argumenten:
var sut = {
ImportantFunction: function(dependency){
dependency("a", 1);
dependency("b", 2);
}
};
Verwendung von QUnit + Sinon und vorausgesetzt, dass die Reihenfolge der Aufrufe ist nicht wichtig, ich könnte schreiben, der folgende test stellt sicher, dass die Funktion fordert, die Abhängigkeit als erwartet:
test("dependency was called as expected", function () {
var dependencyStub = sinon.stub();
sut.ImportantFunction(dependencyStub);
ok(dependencyStub.calledTwice, "dependency was called twice");
sinon.assert.calledWith(dependencyStub, "a", 1);
sinon.assert.calledWith(dependencyStub, "b", 2);
});
Aber was ist, wenn die Reihenfolge wichtig ist und ich möchte den test zu berücksichtigen? Was ist die beste Art und Weise zu schreiben, wie ein test mit QUnit+Sinon?
Habe ich verwendet den folgenden Ansatz, aber ich verliere die beschreibende Fehlermeldung, bereitgestellt durch sinon Behauptungen (zeigt den erwarteten und tatsächlichen Werte). Für diese habe ich gerade manuell Hinzugefügt einige aussagekräftige Nachricht, aber es ist nicht so nützlich, wie eine Fehler-Meldung mit der erwarteten und tatsächlichen Werte (und muss manuell verwaltet werden).
ok(dependencyStub.firstCall.calledWith("a", 1), "dependency called with expected args 'a', 1");
ok(dependencyStub.secondCall.calledWith("b", 2), "dependency called with expected args 'b', 2");
Gibt es eine Möglichkeit, eine Behauptung wie sinon.assert.calledWith
für einen bestimmten Anruf, wie der erste oder zweite Anruf?
Beispiel-setup in diese Geige
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
sinon.assert.callOrder(spy1, spy2, ...)
oderspy1.calledBefore(spy2)
oderspy2.calledAfter(spy1)
.Diese können auch verwendet werden, mit dem Ergebnis
spy.calledWith(...)
z.B.sinon.assert.callOrder(spy.withArgs('a'), spy.withArgs('b'))
.Und genau wie ich es war, die Schaffung der Probe, Fiedel, ich habe die Lösung gefunden...
In meinem code, ich war mit version 1.7.1 von Sinon, aber beim schreiben der Geige mit Sinon ' s neueste version (1.14.1 wie heute) habe ich einfach gemerkt, dass Sie passieren kann einen bestimmten spyCall die
assert.calledWith
Methode. Das heißt, Sie können das folgende schreiben:Also den test wollte ich erstellen werden können schön geschrieben:
Fiddle hier
Bearbeiten
Fand im github-repository die Diskussion, dass diese änderung eingeführt. Durch das Datum der änderung wurde zusammengeführt zu meistern, sollte diese Arbeit auf version 1.13.0 und neuer.
Wenn Sie ältere Versionen, die Sie verwenden können, mantonis Lösung: