[解決済み] Angular 2のテスト - 非同期関数呼び出し - いつ使うか?
質問
のasync関数はいつ使うのですか? テストベッド を使用する場合、Angular 2でテストするときですか?
どのような場合に使用するのですか?
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [MyModule],
schemas: [NO_ERRORS_SCHEMA],
});
});
で、これはいつ使うの?
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MyModule],
schemas: [NO_ERRORS_SCHEMA],
});
}));
どなたかこの件について教えていただけませんか?
どのように解決するのですか?
async
を指定しないと、次のテストが開始されません。
async
がそのタスクをすべて終了させるまで、 次のテストを開始させません。何
async
はコールバックをゾーンでラップし、そこで全ての非同期タスク (例えば
setTimeout
のような)すべての非同期タスクが追跡されます。すべての非同期タスクが完了したら、次に
async
が完了します。
Angular以外でJasmineを使用したことがある方は、Jasmineを使用する際に
done
がコールバックに渡されるのを見たことがあるかもしれません。
it('..', function(done) {
someAsyncAction().then(() => {
expect(something).toBe(something);
done();
});
});
これはネイティブのJasmineで、Jasmineに、このテストは
done()
. もし私たちが
done()
を呼び出さず、代わりにこうします。
it('..', function() {
someAsyncAction().then(() => {
expect(something).toBe(something);
});
});
テストは期待値よりも前に完了します。なぜなら、プロミスは の後に を解決するからです。
Angularでは(Jasmine環境では)、Angularは実際に
done
を使用するとき、裏側で
async
. これは Zone 内のすべての非同期タスクと、それらがすべて終了したときの記録を取ります。
done
は舞台裏で呼び出されます。
あなたの特定のケースで
TestBed
の構成では、一般に、次のような場合に使用します。
compileComponents
. それ以外に呼び出さなければならないような状況に遭遇することはほとんどありません。
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MyModule],
schemas: [NO_ERRORS_SCHEMA],
})
.compileComponent().then(() => {
fixture = TestBed.createComponent(TestComponent);
});
}));
を使用するコンポーネントをテストする場合
templateUrl
(を使用するコンポーネントをテストする場合(webpackを使用していない場合)、Angularはテンプレートを取得するためにXHRリクエストを行う必要があり、コンポーネントのコンパイルは非同期となります。そのため、テストを続ける前に解決されるまで待つ必要があります。
関連
-
[解決済み] BehaviorSubjectとObservableの違い?
-
[解決済み] Angular/RxJS `Subscription` からいつ退会すればいいのか?
-
[解決済み] フェイク、モッキング、スタビングの違いとは?
-
[解決済み] NGIf else "の使い方を教えてください。
-
[解決済み] Angularで@Input()の値が変更されたときに検出する方法は?
-
[解決済み] C# "internal "アクセス修飾子でユニットテストを行う場合
-
[解決済み】AngularでjQueryを使用するには?
-
[解決済み] 64進数の文字列を角(2+)でエンコードおよびデコードする。
-
[解決済み] Angular 2 - ルーティング - ObservableでCanActivateする。
-
[解決済み] Angular Material 2 ネストされたオブジェクトによるデータテーブルのソート
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] angular4 / typescriptでdocument.getElementByIdの置き換え?
-
[解決済み] Angular v5からAngular v6にプロジェクトをアップグレードしたい。
-
[解決済み] 文字列|ヌル'型の引数は、文字列'型のパラメータに代入できません。タイプ 'null' はタイプ 'string' に割り当てられません。
-
[解決済み] Angular2 bodyタグにクラスを追加する
-
[解決済み] Karma/Jasmineのテストで「[object ErrorEvent] thrown」エラーが発生した場合、どのようにデバッグすればよいですか?
-
[解決済み] Angular 2で入力タグのファイルタイプで選択されたファイルをリセットする方法は?
-
[解決済み] angular-cli server - APIリクエストを別のサーバーにプロキシする方法は?
-
[解決済み] Angular 2 - ルーティング - ObservableでCanActivateする。
-
[解決済み] Angular2 ルーターがクエリ文字列を保持する
-
[解決済み] Angular2で複数のルートパラメータを渡す