我正在嘗試設置一個setInterval調用的測試。 setInterval的總是創建一個新的計時器,這樣無論你如何遙遙領先移動打勾()總是會有這個消息的錯誤:仍在隊列1定時器(S):如何測試使用setInterval使用jasmine的角度服務?
錯誤。
如果我用setInterval覆蓋setTimeout函數,那麼測試按預期通過。我已經添加了代碼,以允許使用通常設置爲setInterval的公共屬性myTimerFunc的角度服務。測試代碼將其設置爲setTimeout。
有沒有更好的方法來測試的setInterval?
這將是很好,如果在隊列中的最後定時器會受茉莉被忽略。然後,我可以測試沒有額外的罪過。
例如,除非您取消覆蓋setInterval的行的註釋,否則此代碼將失敗。我不介意在測試代碼中執行此操作,但我希望避免將額外的東西添加到普通代碼中以允許此重寫。
import { fakeAsync, tick } from '@angular/core/testing'
describe('testing setTimeout and setInterval:',() => {
it('setTimeout should work', fakeAsync(() => {
let callback = jasmine.createSpy('setTimeoutCallback')
setTimeout(() => {
callback()
}, 55)
tick(56)
expect(callback).toHaveBeenCalled();
}));
// let setInterval = setTimeout
it('setInterval should work', fakeAsync(() => {
let callback = jasmine.createSpy('setTimeoutCallback')
setInterval(() => {
callback()
}, 55)
tick(56)
expect(callback).toHaveBeenCalled();
}));
})
謝謝。我同意你的建議不是什麼負擔,特別是因爲我正在考慮限制setInterval重複的次數(而不是讓它變成前後) –