我的服务看起来像这样
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;
}
});
为了测试这一点,我创建了一个 stub (用于与 catchError 一起使用)
export class ServiceStub {
public getData(): Observable<Data> {
return of({errorMessage: 'some error'});
}
}
此代码在订阅内部作为“res”返回,但不在订阅的错误回调中返回。
我尝试抛出新的错误('some error')
,但我需要返回一个对象。
我也尝试过 throw({errorMessage: 'some error'})
但测试失败并显示
[object Object] thrown
最佳答案
您可以使用throwError
运算符。欲了解更多信息,请查看docs
将您的 stub 更改为此
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'});
});
}
关于angular - 在我的测试 stub 中强制使用 rxjs 发生错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55156638/