私は現在、自分のコンポーネントの1つに対してユニットテストを書いています。特に、私はlogin(): void
の機能を持っています。私はshowSpinner
プロパティはuserService.login
を呼び出す前にtrue
に設定されることを確認し、テストを書くのに苦労していますAngular2 testing logic before subscribe
login(): void {
this.showSpinner = true;
this.userService.login(loginData)
.subscribe(result => {
this.showSpinner = false;
}
)
}
:ここでは簡略化された論理です。 .subscribe
は(私は私のコンポーネントでthis.showSpinner = false
をコメントアウト試みたが、テストは合格)すぐに実行/解決さので、
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();
});
})));
});
そして、このテストは失敗します。
は、ここに私のテストです。私userService
モックで
、私はモックlogin
方法については、以下を持っている:this
がmockUserService
ある
this.loginSpy = this.spy('login').andReturn(Observable.of(this));
。
userService
のlogin
メソッドをuserService
に正しく偽装していると確信しています。正しく動作するこのコンポーネントの他のテストがあります。
また、私のスパイからObservable.of(this).delay(1)
を返してから、私のテストでtick(1)
を呼び出してみました。しかし、その中に矛盾した行動の結果、時には私のテストに合格し、それ以外の時間は、私はというエラーを取得していること:
Error: 1 periodic timer(s) still in the queue.
にはどうすれば.subscribe()
の前にロジックをテストすることができますか?