2016-04-28 59 views
1

我试图编写一个单元测试setInterval(),但我不知道如何窥探fetchState()如何测试设置在sinon js的时间间隔

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

回答

3

间谍未注册到的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; 
});