1
在我的應用程序中,我編寫了一個AuthService來處理後端服務授權。要通知組件關於新的登錄狀態,我使用一個BehavourSubject來更新它的用戶。在這裏,(簡化)代碼:單元測試使用RxJs主題的Angular2服務
@Injectable()
export class OAuth2Service {
private authState: BehaviorSubject<boolean> = new BehaviorSubject(false);
login(): void {
this.authState.next(true);
}
public getAuthState(): Observable<boolean> {
return this.authState.asObservable();
}
}
現在我想單元測試的行爲,並寫了一個測試根據Angular2文檔和Ticket如下:
it('should handle auth state', async(inject([OAuth2Service, TokenDao], (oAuth2Service: OAuth2Service, tokenDao: TokenDao) => {
return oAuth2Service.getAuthState().toPromise()
.then((state) => {
expect(state).toEqual(false);
});
})
));
不幸的是,toPromise()是永遠不會執行它的()回調。據我所知,這是因爲Observable永遠不會完成(正如預期的那樣,auth狀態可以在整個應用生命週期中改變)。 See here。
注意:不會調用login(),因爲BehaviourSubject應該默認爲false。我修改了測試以調用login()。仍然沒有承諾回調。
問題:如何正確測試auth服務的行爲?我錯過了什麼?
嘗試從您的測試中移除「return」 –