asyncasyncすべてのタスクが完了するまで、次のテストを開始できません。何asyncんと、すべての非同期タスクが(例えばゾーンにコールバックを包んでsetTimeout)追跡されます。すべての非同期タスクが完了すると、async完了します。
Angularの外でJasmineを使用したことがある場合はdone、コールバックに渡されるのを見たことがあるかもしれません。
it('..', function(done) {
someAsyncAction().then(() => {
expect(something).toBe(something);
done();
});
});
ここでは、これはネイティブのJasmineであり、このテストはを呼び出すまで完了を遅らせる必要があることをJasmineに伝えますdone()。電話をかけずdone()、代わりにこれを行った場合:
it('..', function() {
someAsyncAction().then(() => {
expect(something).toBe(something);
});
});
テストは同期タスクの実行が終了した後にPromiseが解決されるため、テストは予想よりも前に完了します。
Angular(Jasmine環境)では、doneを使用すると、Angularは実際に舞台裏で呼び出しますasync。ゾーン内のすべての非同期タスクを追跡し、それらがすべて終了doneすると、バックグラウンドで呼び出されます。
TestBed構成に関する特定のケースでは、一般的に、必要なときにこれを使用しcompileComponentsます。そうでなければそれを呼ばなければならない状況に遭遇することはめったにありません
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MyModule],
schemas: [NO_ERRORS_SCHEMA],
})
.compileComponent().then(() => {
fixture = TestBed.createComponent(TestComponent);
});
}));
を使用するコンポーネントをテストするtemplateUrl場合(webpackを使用していない場合)、Angularはテンプレートを取得するためにXHRリクエストを行う必要があるため、コンポーネントのコンパイルは非同期になります。したがって、テストを続行する前に、問題が解決するまで待つ必要があります。
async必要ありません。を使用templateUrlしている場合はです。ただし、asyncインクルードはインラインテンプレートコンポーネントを「破壊」しません。asyncすべてのテストにデフォルトで使用できると言っても差し支えないと思いますか?