Javascript 如何对我的可观察对象的捕获体进行单元测试

Javascript 如何对我的可观察对象的捕获体进行单元测试,javascript,unit-testing,jasmine,rxjs,angular-observable,Javascript,Unit Testing,Jasmine,Rxjs,Angular Observable,在我的Angular应用程序中,我以以下方式使用observatives: getItem(id): Observable<Object> { return this.myApi.myMethod(...).catch(e => { /* CATCH BODY */ return Observable.throw(e); }); } 但是,我不知道如何单元测试捕获体,如何模拟可观察的抛出错误 我知道已经有人问过类似的问题,但我的情况略有不同,我无法成功

在我的
Angular
应用程序中,我以以下方式使用
observatives

getItem(id): Observable<Object> {
  return this.myApi.myMethod(...).catch(e => {
    /* CATCH BODY */
    return Observable.throw(e);
  });
}
但是,我不知道如何单元测试
捕获体
,如何模拟
可观察的
抛出错误


我知道已经有人问过类似的问题,但我的情况略有不同,我无法成功地对catch部分进行单元测试。

创建另一个
it
块,而不是使用
Observable.of
使用
Observable.throw
,它将创建一个
可观察的
,它不发出任何项目,并以错误终止

it('getItem(...) should fail',
  inject([MyService], (service: MyService) => {
    const mockData = 'mock'; // can be anything
    const mockObservable = Observable.throw(mockData); // make it fail

    const spy = spyOn(myApi, 'myMethod').and.returnValue(mockObservable);

    service.getItems().subscribe(
        (data) => { 
            // success
        },
        (error) => { 
            expect(error).toEqual(mockData);
        }
    );

    expect(spy).toHaveBeenCalled();
  })
);

希望它有帮助

您需要模拟
myApi
where
myApi.myMethod(…)
发送错误通知。是的,但具体如何?
it('getItem(...) should fail',
  inject([MyService], (service: MyService) => {
    const mockData = 'mock'; // can be anything
    const mockObservable = Observable.throw(mockData); // make it fail

    const spy = spyOn(myApi, 'myMethod').and.returnValue(mockObservable);

    service.getItems().subscribe(
        (data) => { 
            // success
        },
        (error) => { 
            expect(error).toEqual(mockData);
        }
    );

    expect(spy).toHaveBeenCalled();
  })
);