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” –