我有这样的服务
public getData(): Observable<Data> {
return this.http
.get<Data>(url)
.pipe(
tap(res => res),
(e: any) => e);
}
我不能使用catchError运算符(Handling error with rxjs not compatible with interceptors)
在组件中,我订阅了该组件,必要时它会引发错误
this.service.getData().subscribe(res => {
myProp = true;
}, (error) => {
if (error.errorMessage === 'xxx') {
myProp = false;
}
});
为了对此进行测试,我创建了一个存根(用于与catchError配合使用)
export class ServiceStub {
public getData(): Observable<Data> {
return of({errorMessage: 'some error'});
}
}
此代码在订阅内部以'res'的形式返回,但不在订阅的错误回调中返回。
我尝试进行Throw new Error('some error')
,但是我需要返回一个对象。
我也尝试过throw({errorMessage: 'some error'})
,但测试失败
抛出[对象对象]
答案 0 :(得分:1)
您可以使用throwError
运算符。有关更多信息,请检查docs
将您的存根更改为此
import { throwError } from 'rxjs';
export class ServiceStub {
public getData(): Observable<Data> {
return throwError({errorMessage: 'some error'});
}
}
或者您可以如下使用Observable
构造函数
getData() {
return new Observable(observer => {
observer.error({errorMessage: 'some error'});
});
}