async
async
すべてのタスクが完了するまで、次のテストを開始できません。何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
すべてのテストにデフォルトで使用できると言っても差し支えないと思いますか?