所以我有一个React组件来设置这样的间隔:
componentDidMount() {
this.interval = window.setInterval(this.myFunction, 500);
}
在执行结束时,myFunction
通过调用clearInterval(this.interval);
来杀死间隔
我使用Sinon的真棒Fake Timer API来确保在500毫秒之后调用myFunction
:
let clock;
beforeEach(() => {
clock = sinon.useFakeTimers();
});
...
it('should call my function', () => {
clock.tick(510);
expect(myFunction).to.have.been.called;
});
但我也想确保计时器已经终止。有没有办法验证clearInterval
已被调用?
我使用expect(window.clearInterval).to.have.been.called;
尝试过,但没有运气,我收到了错误消息。此外,Sinon文档没有说明如何为clearInterval
提供存根。
非常感谢!
答案 0 :(得分:1)
我采用了不同的方法。我没有验证间隔是否已被清除,而是将测试更改为勾选两次并确保myFunction
仅被调用一次,如下所示:
it('should call my function', () => {
clock.tick(510);
// the interval should have been cleared the first time the clock ticked
clock.tick(510);
// given that the interval should have been cleared,
// myFunction shouldn't have been called more than once
expect(myFunction).to.have.been.calledOnce;
});
非常感谢大家的帮助! :)