setInterval呼び出しのテストをセットアップしようとしています。 setIntervalは常に新しいタイマーを作成するので、tick()を先に移動しても、常にこのメッセージでエラーが発生します。jasmineを使用してsetIntervalを使用する角度サービスをテストするにはどうすればよいですか?
エラー:1つのタイマーがキューに残っています。
setTimeout関数をsetIntervalでオーバーライドすると、テストは正常に実行されます。私は通常、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が繰り返される回数を制限することを検討しているので、あなたの提案はあまり負担にならないことに同意します。 –