如何在sinon js中测试集间隔

时间:2016-04-28 05:12:05

标签: javascript mocha sinon sinon-chai

我正在尝试为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;
});

1 个答案:

答案 0 :(得分: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;
});