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