web-dev-qa-db-fra.com

Réinitialiser "appelé" Compter sur Sinon Spy

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).

32
cantera

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:

  1. Supprimer le comportement du stub
  2. Supprimez l'historique du stub (callCount).

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:

  • Si vous souhaitez simplement réinitialiser le nombre d'appels , utilisez reset. Cela garde l'espion.
  • Pour supprimer l'espion utilisez 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 .

42
TJ.