如何使用sinon验证clearInterval?

时间:2017-06-26 00:55:32

标签: javascript sinon

所以我有一个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提供存根。

非常感谢!

1 个答案:

答案 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;
});

非常感谢大家的帮助! :)