現在、コンポーネントの 1 つの単体テストを作成しています。特に、私はlogin(): void
機能を持っています。単純化されたロジックは次のとおりです。
login(): void {
this.showSpinner = true;
this.userService.login(loginData)
.subscribe(result => {
this.showSpinner = false;
}
)
}
を呼び出す前にshowSpinner
プロパティが に設定されていることを確認するテストを書くのに苦労しています。true
userService.login
これが私のテストです:
it('should display the spinner when the form is being saved',
inject([TestComponentBuilder], fakeAsync((tcb: any) => {
createComponent(tcb).then((fixture:ComponentFixture<any>) => {
fixture.componentInstance.login();
expect(fixture.componentInstance.showSpinner).toBe(true);
tick();
});
})));
});
そして、このテストは失敗します。これは、.subscribe
すぐに解決/実行されるためです (コンポーネントでコメントアウトしようとしたところthis.showSpinner = false
、テストに合格しました)。
私のuserService
モックでは、login
メソッドのモックに対して次のものがあります。
this.loginSpy = this.spy('login').andReturn(Observable.of(this));
はどこthis
ですかmockUserService
。
userService
このコンポーネントには正しく動作する他のテストがあるため、私はモックを作成し、特にlogin
メソッドをuserService
正しく動作させていると確信しています。
また、スパイから戻ってテストObservable.of(this).delay(1)
を呼び出してみました。tick(1)
ただし、テストに合格することもあれば、次のようなエラーが表示されることもあるという点で、一貫性のない動作が発生します。
Error: 1 periodic timer(s) still in the queue.
に先行するロジックをテストするにはどうすればよい.subscribe()
ですか?