Comment réinitialiser le compte "appelé" sur un espion Sinon avant chaque test?
Voici ce que je fais maintenant:
beforeEach(function() {
this.spied = sinon.spy(Obj.prototype, 'spiedMethod');
});
afterEach(function() {
Obj.prototype.spiedMethod.restore();
this.spied.reset();
});
Mais quand je vérifie le nombre d'appels dans un test:
it('calls the method once', function() {
$.publish('event:trigger');
expect(this.spied).to.have.been.calledOnce;
});
... le test échoue et signale que la méthode a été appelée X fois (une fois pour chaque test précédent qui a également déclenché le même événement).
Cette question a été posée il y a un certain temps, mais peut toujours être intéressante, en particulier pour les personnes qui ne connaissent pas sinon.
this.spied.reset()
n'est pas nécessaire car Obj.prototype.spiedMethod.restore();
supprime l'espion.
Mise à jour 2018-03-22 :
Comme indiqué dans certains des commentaires ci-dessous ma réponse, stub.reset fera deux choses:
Selon le docs ce comportement a été ajouté dans [email protected].
La réponse mise à jour à la question serait d'utiliser stub.resetHistory ().
Exemple de la documentation:
var stub = sinon.stub();
stub.called // false
stub();
stub.called // true
stub.resetHistory();
stub.called // false
Mise à jour:
reset
. Cela garde l'espion.restore
.Lorsque vous travaillez avec sinon, vous pouvez utiliser les sinon assertions pour des tests améliorés. Donc au lieu d'écrire expect(this.spied).to.have.been.calledOnce;
on pourrait écrire:
sinon.assert.calledOnce(Obj.prototype.spiedMethod);
Cela fonctionnerait également avec this.spied
:
sinon.assert.calledOnce(this.spied);
Il existe de nombreuses autres méthodes d'assertion sinon. À côté de calledOnce
, il y a aussi calledTwice
, calledWith
, neverCalledWith
et beaucoup plus sur sinon assertions .