2016-04-28 4 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; 
}); 
のようになります。
関連する問題