2

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

主代码.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);
};

规范.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;
});
4

1 回答 1

4

间谍未注册到 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;
});
于 2016-05-06T22:07:53.100 回答