javascript - unit - Restablecer "llamado" Cuenta en Sinon Spy
sinon mocha (1)
¿Cómo reinicio el recuento "llamado" en un espía de Sinon antes de cada prueba?
Esto es lo que estoy haciendo ahora:
beforeEach(function() {
this.spied = sinon.spy(Obj.prototype, ''spiedMethod'');
});
afterEach(function() {
Obj.prototype.spiedMethod.restore();
this.spied.reset();
});
Pero cuando reviso el recuento de llamadas en una prueba:
it(''calls the method once'', function() {
$.publish(''event:trigger'');
expect(this.spied).to.have.been.calledOnce;
});
... la prueba falla e informa que el método se llamó X veces (una vez por cada prueba anterior que también activó el mismo evento).
Esta pregunta se hizo hace un tiempo, pero aún puede ser interesante, especialmente para las personas que son nuevas en sinon.
this.spied.reset()
no es necesario como Obj.prototype.spiedMethod.restore();
elimina el espía.
Actualización 2018-03-22 :
Como se señaló en algunos de los comentarios a continuación de mi respuesta, stub.reset hará dos cosas:
- Eliminar el comportamiento del trozo
- Eliminar el historial de stub (callCount).
De acuerdo con la stub.reset este comportamiento se agregó en [email protected].
La respuesta actualizada a la pregunta sería usar stub.resetHistory() .
Ejemplo de la documentación:
var stub = sinon.stub();
stub.called // false
stub();
stub.called // true
stub.resetHistory();
stub.called // false
Actualizar:
- Si solo desea restablecer el recuento de llamadas , utilice
reset
. Esto mantiene al espía. - Para eliminar el espía utiliza
restore
.
Cuando trabaje con sinon, puede utilizar las aserciones de sinon para mejorar las pruebas. Así que en lugar de escribir expect(this.spied).to.have.been.calledOnce;
uno podría escribir:
sinon.assert.calledOnce(Obj.prototype.spiedMethod);
Esto funcionaría igual de bien con this.spied
.
sinon.assert.calledOnce(this.spied);
Hay muchos otros métodos de afirmación de sinon. Junto a calledOnce
calledTwice
, también se calledTwice
calledWith
calledTwice
, se calledWith
, neverCalledWith
y mucho más sobre las afirmaciones de sinon .