我正在尝试设置一个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重复的次数(而不是让它变成前后) –