Je voudrais vérifier que bar()
est appelée dans foo()
à partir de mon test unitaire.
J'ai pensé que Sinon espions pourrait convenir, mais je ne sais pas comment les utiliser.
Existe-t-il un moyen de vérifier que la méthode est appelée? Peut-être même extraire les arguments utilisés dans l'appel bar()
?
var spy = sinon.spy(foo);
function foo(){
bar(1,2,3);
}
function bar(){ }
foo();
// what to do with the spy?
Dans votre cas, vous essayez de voir si bar
a été appelé, vous voulez donc espionner bar
plutôt que foo
.
Comme décrit dans le doc :
function bar(x,y) {
console.debug(x, y);
}
function foo(z) {
bar(z, z+1);
}
// Spy on the function "bar" of the global object.
var spy = sinon.spy(window, "bar");
// Now, the "bar" function has been replaced by a "Spy" object
// (so this is not necessarily what you want to do)
foo(1);
bar.getCall(0).args => should be [1,2]
Maintenant, espionner les internes de la fonction couple fortement votre test de "foo" à sa mise en œuvre, vous tomberez donc dans le débat habituel "mockist vs classique" .
Je suis d'accord avec Adrian en disant que vous vouliez probablement espionner le bar à la place.
var barSpy = sinon.spy(bar);
Puis pour vérifier qu'il a été appelé une fois
assert(barSpy.calledOnce);
Je viens d'appeler du tout
assert(barSpy.called)
Appelé x nombre de fois
assert.equal(barSpy.callCount, x);
Si vous souhaitez extraire les arguments du premier appel de l'espion:
var args = barSpy.getCalls()[0].args
Ensuite, vous pouvez faire ce que vous voulez avec ces arguments.
Ne devriez-vous pas espionner le bar plutôt que le foo?
var spy = sinon.spy(bar)
Appelez foo:
foo()
La barre de contrôle a été appelée:
console.log(spy.calledOnce)