私はユニットテストのために角度2のモックバックエンドから結果を得ようとしています。現在、我々はfakeAsync
と時間の経過をシミュレートするタイムアウトを使用しています。tick()を使用する関数で角2のfakeAsyncがタイムアウトを待っていますか?
現在の作業ユニットテスト
it('timeout (fakeAsync/tick)', fakeAsync(() => {
counter.getTimeout();
tick(3000); //manually specify the waiting time
}));
しかし、これは我々が手動で定義されたタイムアウトに限定されていることを意味します。非同期タスクが完了したときではありません。私がやろうとしているのは、テストを続ける前にタスクが完了するまで待つようにtick()
を得ることです。
これは意図したとおりに動作していないようです。私はこのシナリオをシミュレートするplnkr exampleを設定
tick() simulates the asynchronous passage of time.
:fakeAsync
とtick
答えhere上に読み
は、と説明しています。
ここでは、タイムアウトのある内部非同期タスクを呼び出すgetTimeout()
メソッドを呼び出します。テストでは、getTimeout()
メソッドを呼び出した後、ラップしてtick()
を呼び出します。
counter.ts
getTimeout() {
setTimeout(() => {
console.log('timeout')
},3000)
}
counter.specs.ts
it('timeout (fakeAsync/tick)', fakeAsync(() => {
counter.getTimeout();
tick();
}));
しかし、ユニットテストがエラー「エラーで失敗します。まだ1つのタイマー(秒)キュー。"
issue here in the angular repoはこれと関連がありますか?
このようにtick()
を使用してタイムアウト機能を待つことはできますか?それとも、もう一つのアプローチがありますか?
私はシンプルな '非同期/ await'ヘルパーでこれを解決しようとしました。残念ながら、テストが合格して正しく動作している間、** zone.js **にはちょっとしたフィット感、チョーク、死亡があります。このフレームワーク特有のものをすべて使わずに簡単なサービステストを書くことができるはずです。 –