考虑以下代码示例
refreshToken(): Observable<object> {
return this.userService.getUser()
.pipe(
mergeMap((user) => this.http.post(
'url', { data: user.id }
).pipe(catchError(this.handleError))
),
tap(...),
mergeMap(...)
);
}
private handleError = (error: any) => {
this.window.location.href = '/logout';
return throwError(new Error('Failed to refresh'));
}
我要完成以下行为-如果post
失败,则将用户重定向到登录页面并中止当前可观察到的情况。
现在我要测试
const userObservable = hot('-u|', { u: user });
const tokenObservable = hot('--#', null, new Error('test'));
userMock.getUser.and.returnValues(userObservable);
httpMock.post.and.returnValue(tokenObservable);
expect(service.refreshToken()).toBeObservable(cold('--(c|)', {c: new Error('Failed to refresh')}));
但是我无法理解原理,如何为这种情况正确编写测试?