在我的测试存根中强制使用rxjs出错

时间:2019-03-14 07:00:28

标签: angular unit-testing rxjs

我有这样的服务

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'}),但测试失败

  

抛出[对象对象]

1 个答案:

答案 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'});
  });
}