【问题标题】:Unit Testing Coverage RxJS.Observable.Catch Block单元测试覆盖 RxJS.Observable.Catch 块
【发布时间】:2017-12-14 15:44:30
【问题描述】:

我正在尝试在类似于以下的代码块上获得单元测试覆盖率,特别是调用方法来处理错误的 catch 块:

return this._http.get(/someurl)
            .map((response: Response) => {
                let results = <any>response.json();
                return results;
            })
            .catch(response => {
                return this.handleError(response);
            });

我已经尝试过:

it('Should call base handleError method when an error occurs',
    fakeAsync(inject([MyService, MockBackend],
        (myService: MyService, mockBackend: MockBackend) => {
              mockBackend.connections.subscribe((connection: MockConnection) => {
                  expect(connection.request.url).toEqual(
                      `/someurl`
                  );
                  connection.mockRespond(new Response(new ResponseOptions({
                      status: 404
                  })));
              });

              spyOn(myService, 'handleError');
              myService.getData(1);
              tick();
              expect(myService.handleError).toHaveBeenCalled();
})));

catch 块永远不会被调用,并且测试失败,因为间谍从未被击中。我试过使用 MockConnection.mockError 也没有运气。我已经看到需要在 Observable 上使用订阅错误处理程序的帖子,但是也必须有一种方法可以通过错误响应来触发 catch 块?我尝试通过 Observable.throw() 抛出 Observable 失败,但这似乎也没有让我走上正确的道路。

【问题讨论】:

    标签: angular unit-testing jasmine rxjs


    【解决方案1】:

    您必须订阅 observable 才能使其执行异步操作。

    spyOn(myService, 'handleError');
    myService.getData(1); // subscribe here
    tick();
    expect(myService.handleError).toHaveBeenCalled();
    

    应该这样实现

    spyOn(myService, 'handleError');
    myService.getData(1).subscribe(value => {
      expect(myService.handleError).toHaveBeenCalled();    
    });
    

    【讨论】:

    • 我遇到了一些其他问题,一些可观察的类型没有按预期返回。另外,我要补充一点,我必须提供一个订阅(value => {}, error => { // expect here })。解决我在使用 expect 语句时遇到的问题。空订阅块对我来说似乎很愚蠢,但错误块允许我根据需要进行断言。底线,非错误情况我有订阅块我不知道为什么我认为我也不需要它来进行负面测试。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多