各テストの前にシノンのスパイの「呼び出された」カウントをリセットするにはどうすればよいですか?
これが私が今やっていることです:
beforeEach(function() {
this.spied = sinon.spy(Obj.prototype, 'spiedMethod');
});
afterEach(function() {
Obj.prototype.spiedMethod.restore();
this.spied.reset();
});
しかし、テストで呼び出し回数を確認すると、次のようになります。
it('calls the method once', function() {
$.publish('event:trigger');
expect(this.spied).to.have.been.calledOnce;
});
...テストは失敗し、メソッドがX回呼び出されたことが報告されます(同じイベントをトリガーした以前の各テストごとに1回)。
この質問はしばらく前に尋ねられましたが、特にシノンを初めて使用する人にとっては興味深いかもしれません。
this.spied.reset()
はスパイを削除するため、Obj.prototype.spiedMethod.restore();
は不要です。
2018年3月22日更新:
私の回答の下のいくつかのコメントで指摘されているように、 stub.reset は2つのことを行います。
docs によると、この動作は[email protected]で追加されました。
質問に対する更新された回答は、 stub.resetHistory()を使用することです。
ドキュメントの例:
_var stub = sinon.stub();
stub.called // false
stub();
stub.called // true
stub.resetHistory();
stub.called // false
_
更新:
reset
を使用してください。これはスパイを保ちます。restore
を使用します。Sinonを使用する場合、拡張テストに sinon assertions を使用できます。したがって、expect(this.spied).to.have.been.calledOnce;
を書く代わりに、次のように書くことができます。
_sinon.assert.calledOnce(Obj.prototype.spiedMethod);
_
これは_this.spied
_でも機能します。
_sinon.assert.calledOnce(this.spied);
_
他にも多くのシノン表明方法があります。 calledOnce
の隣には、calledTwice
、calledWith
、neverCalledWith
など、 sinon assertions に関するその他の情報もあります。