29
我需要測試依賴於setTimeout以執行週期性任務的JavaScript代碼。我如何從我的摩卡測試中模擬時間的流逝,以便調用setTimeout回調函數?如何模擬摩卡測試中的時間傳遞,以便調用setTimeout回調?
我基本上要求的功能類似於Jasmine's Mock Clock,它允許您提前JavaScript時間多個滴答聲。
我需要測試依賴於setTimeout以執行週期性任務的JavaScript代碼。我如何從我的摩卡測試中模擬時間的流逝,以便調用setTimeout回調函數?如何模擬摩卡測試中的時間傳遞,以便調用setTimeout回調?
我基本上要求的功能類似於Jasmine's Mock Clock,它允許您提前JavaScript時間多個滴答聲。
我發現Sinon.JS支持通過sinon.useFakeTimers操作JavaScript時鐘,如其Fake Timers文檔中所述。這是完美的,因爲我已經將Sinon用於嘲笑的目的,我想Mocha本身並不支持這一點,因爲它更像是一個嘲諷庫。
下面是採用摩卡/柴/興農一個例子:
var clock;
beforeEach(function() {
clock = sinon.useFakeTimers();
});
afterEach(function() {
clock.restore();
});
it("should time out after 500 ms", function() {
var timedOut = false;
setTimeout(function() {
timedOut = true;
}, 500);
timedOut.should.be.false;
clock.tick(510);
timedOut.should.be.true;
});
爲什麼beforeEach和afterEach? – R01010010
@Rimbuaj爲了在每次測試之前安裝模擬時鐘並在之後將其刪除? – aknuds1
但只有一個測試...這就是爲什麼我問 – R01010010