1
をテストするので、私はサービスを持っている:に観察完了
@injectable()
export class MyService {
public go() : Observable { /* does not complete returned observable */ }
}
を、私はその方法の観察可能な補完のためのテストを持っている:
it('should complete', inject([MyService], (s : MyService) => {
s.go()
.timeout(10, 'did not complete')
.subscribe(
undefined,
// if observable failed on timeout, fail test
e => e == 'did not complete' && fail(e)
);
}));
我々はテストが失敗することを期待もののので、それが正常に終了失敗した関数は、テストが既に終了した後に呼び出されます。
通常、我々はjasmine
のdone
でこの問題を解決するが、私はの角度inject
機能を使用したいと仮定すると思い、どのようにこれを達成することができますか?
編集:角度のasync
を使用してfakeAsync
は、これらのゾーンで許可されていない区間を、設定しようとtimeout
Observable
年代として、どちらかのトリックをしませんでした。
'async'はうまくいかず、間隔を作成しようとしています(Observable.timeoutはおそらくそうです)。あなたはそれを実行するのに成功しましたか? – baryo
btw、私はあなたが言及した最後のソリューションを使用して終わったし、それは動作します。 – baryo
いいえ私はそれを試していない。 'async'の代わりに試してみることの1つは[' fakeAsync'](https://angular.io/docs/ts/latest/api/core/testing/index/fakeAsync-function.html)です。 'tick 'を呼び出す必要があります。ミリ秒の遅延を 'tick'メソッドに渡すことができます。多分それはうまくいくでしょう。たぶん 'async'は区間をサポートしていないかもしれません。私はおそらく 'fakeAsync'も動作しませんが、それを試すことができます –