在每次测试之前,如何重设Sinon spy 的“被叫”计数?
这是我现在正在做的事情:
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次(对于每个先前触发相同事件的测试也一次)。
最佳答案
这个问题是在不久前提出的,但可能仍然很有趣,特别是对于刚接触sinon的人。
不需要this.spied.reset()
,因为Obj.prototype.spiedMethod.restore();
可以删除 spy 。
更新2018-03-22 :
正如我的回答下面的一些评论所指出的那样,stub.reset将做两件事:
根据docs,此行为已添加到[email protected]中。
该问题的更新答案将是使用stub.resetHistory() 。
来自文档的示例:
var stub = sinon.stub();
stub.called // false
stub();
stub.called // true
stub.resetHistory();
stub.called // false
更新:
reset
。这样可以保留 spy 。 restore
。 使用sinon时,可以使用sinon assertions进行增强的测试。因此,无需编写
expect(this.spied).to.have.been.calledOnce;
,而可以编写:sinon.assert.calledOnce(Obj.prototype.spiedMethod);
这对于
this.spied
也可以使用:sinon.assert.calledOnce(this.spied);
还有许多其他的sinon断言方法。在
calledOnce
旁边,还有calledTwice
,calledWith
,neverCalledWith
以及有关sinon assertions的更多内容。关于javascript - 重置Sinon Spy的 “called”计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19883505/