代码之家  ›  专栏  ›  技术社区  ›  Steve Fitzsimons

Angular 5 HttpClient HttpTestingController测试错误路径

  •  4
  • Steve Fitzsimons  · 技术社区  · 8 年前

    我有一个发出HTTP get请求的服务,如下所示

      public get(uri: string, params?: HttpParams): Observable<Object> {
        return params ? this._http.get(uri, { params: params }) : this._http.get(uri)
          .catch((error: HttpErrorResponse) => this.catchHttpError(error));
      }
    
      private catchHttpError(error: HttpErrorResponse) : Observable<Object> {
        this._logger.error(`error occurred: ${error.message}`);
        throw(error);
      }
    

    我有一个测试规范,可以测试成功的路径。如何:

    1. 使HttpTestingController出错,以便调用catchHttpError函数?

    2. 测试\u httpService。get从catchHttpError函数返回错误?

    到目前为止,我的测试如下所示:

    it('should make a get request and catch error', async(inject([HttpService, HttpTestingController], (_httpService: HttpService, backend: HttpTestingController) => {
      spyOn(_httpService, 'get').and.callThrough();
      let actualObjects: Object[] = [];
      _httpService.get('/api/dummy/get/uri').subscribe((objects: Object[]) => {
        actualObjects = objects;
      });
    
      backend.expectOne('/api/dummy/get/uri').flush(expectedObjects);
      expect(_httpService.get).toHaveBeenCalledTimes(1);
      expect(_httpService.get).toHaveBeenCalledWith('/api/dummy/get/uri');
    
      expect(actualObjects).toEqual(expectedObjects);
      expect(actualObjects.length).toBe(1);
      //expect(_httpService.get).toThrow();
    })));
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Steve Fitzsimons    8 年前

    结果就是这样。

    it('should make a get request and catch error', async(inject([HttpService, HttpTestingController], (_httpService: HttpService, backend: HttpTestingController) => {
      spyOn(_httpService, 'get').and.callThrough();
      let actualObjects: Object[] = [];
      _httpService.get('/api/dummy/get/uri').subscribe(null, (response: HttpErrorResponse) => {
        expect(response.message).toBe('Http failure response for /api/dummy/get/uri: 500 Server Error');
      });
    
      backend.expectOne('/api/dummy/get/uri').flush(expectedObjects, { status: 500, statusText: 'Server Error' });
      expect(_httpService.get).toHaveBeenCalledTimes(1);
      expect(_httpService.get).toHaveBeenCalledWith('/api/dummy/get/uri');
    
      expect(actualObjects).toBeNull();
    })));
    
    推荐文章