tick()
関数はfakeAsync
を利用することを知っています。また、async
およびfakeAsync
とともにfixture.whenStable().then()
を使用することもできます。
両方の正確なユースケースを知りたい。誰でもこれを例で説明できますか。
注:両方のシナリオで偽のサービスまたはスタブを使用したい
ほとんどの場合、それらは同じ意味で使用できます。外部テンプレートとそのコンポーネントの場合を除いて、一方が他方に対してrequiredであるという私の頭の上のものは考えられませんスタイルは、テストのためにコンポーネントにインラインでコンパイルされません(つまり、SystemJSを使用)。 SystemJSを使用する場合、外部テンプレートとスタイルに対してXHR呼び出しが行われます。 XHR呼び出しが行われている場合、fakeAsync
は使用できません。一方、Webpackを使用する場合、外部テンプレートとスタイルはインラインでコンパイルされるため、fakeAsync
を使用できます。
それ以外は、スタイルの好みの問題だと思います。 この例 のように、非同期の複数の呼び出しを行う必要があると想像できます。ネストされたfixture.whenStable()
呼び出しが必要です。これはstartを呼び出してかなりいように見えます
_fixture.detectChanges();
fixture.whenStable().then(() => {
expect(something)
changeSomething()
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(something)
changeSomething();
fixture.detectChanges()
fixture.whenStable().then(() => {
expect(somthingeElse)
})
})
})
_
これは、すべてのfixture.whenStables()
がなくても、きれいに見えるかもしれません(そして、推論するのも簡単です)。
_fixture.detectChanges();
tick();
expect(something)
changeSomething()
fixture.detectChanges();
tick();
expect(somethingElse)
changeSomething()
fixture.detectChanges();
tick();
expect(somethingElse);
_
私が追加するかもしれないもう一つは、 [〜#〜] ocd [〜#〜] 私の一部always確認する必要があるfixture.whenStable()
での呼び出しが呼び出されること
_fixture.whenStable().then(() => {
expect(...)
console.log('called...')
})
_
async
でテストをラップするのを忘れたことを想像してください。それがなければ、テストは_fixture.whenStable
_解決の前に完了し、あなたはそれを知ることは決してないでしょう。テストに合格したように見えますが、これは誤検知です。実際に起こったことは、アサーションが呼び出されることさえなかったことです。
このため、実際にasync
から離れています。しかし、そのスタイルが好きで、常にasync
でテストをラップすることを信じて、それを固守してください。ただし、fakeAsync
を使用すると、すべてが同期的に呼び出されるため、アサーションが呼び出されない可能性があります。