Je n'arrive pas à faire fonctionner les simulations avec onCall et les arguments attendus.
Le code ci-dessous donne Object #<Object> has no method 'withExactArgs'
var mock = sinon.mock();
mock.exactly(2);
mock.onCall(0).withExactArgs("arg1", "arg2").returns("foo");
mock.verify();
La méthode withExactArgs
est disponible sur la propriété stub : mock.onCall(0).stub.withExactArguments
.
Est-ce un comportement intentionnel ou un bug ?
Il semble que cela ne fonctionne pas non plus avec .stub. J'obtiens une erreur indiquant que la méthode a été appelée avec les mauvais arguments. Affichage des arguments du premier appel mais des exigences du second. Comme s'il rejetait le onCall(0).
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();
Donne ExpectationError: Anonymous mock received wrong arguments ["bar1", "bar2"], expected ["foo1", "foo2"]
Il ne s'agit ni d'un comportement intentionnel ni d'un bogue. Vous mélangez les métaphores. onCall
et withArgs
sont deux façons d'identifier une invocation de méthode.
// So either,
mock.onCall(0).returns("foo")
// OR
mock.withArgs("arg1", "arg2").returns("foo")
// but not both
Votre deuxième exemple est défectueux pour la même raison et devrait probablement être réécrit à l'aide d'un stub.
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")
);
Malheureusement, il n'y a pas de withExactArgs
sur Stub
.
Toutefois...
Vous pouvez identifier des appels individuels à un stub, même lorsqu'ils sont appelés plusieurs fois avec les mêmes arguments. Par exemple
stub.withArgs("foo")
.onCall(0).returns("a")
.onCall(1).returns("b");
stub.withArgs("bar")
.onCall(0).returns("c")
.onCall(1).returns("d");
Si ça aide ?
@mantoni je pense que ce problème peut être clos
Commentaire le plus utile
Il ne s'agit ni d'un comportement intentionnel ni d'un bogue. Vous mélangez les métaphores.
onCall
etwithArgs
sont deux façons d'identifier une invocation de méthode.Votre deuxième exemple est défectueux pour la même raison et devrait probablement être réécrit à l'aide d'un stub.
Malheureusement, il n'y a pas de
withExactArgs
surStub
.