如何在sinon js中测试设置间隔

How to test set Interval in sinon js

我正在尝试为 setInterval() 编写单元测试,但我不确定如何监视 fetchState()

maincode.js:

var pollStatus = function(interval, killPolling) {
   // Clear Interval if function is called again 
   if (killPolling || StatusPollObj) {
        clearInterval(StatusPollObj);
        StatusPollObj = false;
    }

    // Call once before setInterval Starts
    fetchState();
    StatusPollObj = setInterval(function() {
        if(somecondtion_to_check_inactivity) return;
        fetchState();
    }, interval);
};

spec.js

 it("state.json setInterval Call",function() {
    this.clock = sinon.useFakeTimers();
    var helper = new state.HELPER();
    var spy = sinon.spy(helper, "fetchState");

    helper.pollStatus('80000', false);
    expect(spy.called).to.be.true;
    this.clock.tick(80000);
    expect(spy.called).to.be.true;
});

间谍未注册到 setInterval。您的函数 fetchState 应作为参数传递给函数。

var someFun = function(callFunc, interval, killPolling) {
    callFunc();
    StatusPollObj = setInterval(function() {
        if(somecondtion_to_check_inactivity) return;
        callFunc();
    }, interval);
} 

你的测试应该是这样的

it("state.json setInterval Call",function() {
    this.clock = sinon.useFakeTimers();
    var helper = new state.HELPER();
    var mySpy = sinon.spy(helper, "fetchState");

    helper.pollStatus(mySpy,'80000', false);
    expect(mySpy.called).to.be.true;
    this.clock.tick(80000);
    expect(mySpy.called).to.be.true;
});