首页 > 解决方案 > 如何在 Angular 8 jasmine 中测试 catchError 场景,以便覆盖 handleError 方法

问题描述

服务方式

createAddress(reqBody): Observable<DataOnPost> {
        return this.http
        .post<DataOnPost>(`APIUrl`, reqBody)
        .pipe(catchError(this.handleError));
    }

处理错误方法::

handleError(error) {
    let errorMessage = '';
    if (error.error instanceof ErrorEvent) {
      // Get client-side error
      errorMessage = error.error.message;
    } else {
      // Get server-side error
      errorMessage = `Error Code: ${error.status}\nMessage: ${error.message}`;
    }
    return throwError(errorMessage);
  }

服务规范.ts

it('should handle error', () => {
    const reqBody = MOCK_BODY;
    spyOn(service, 'handleError').and.callThrough();
    service.createAddress(reqBody).subscribe(
      data => fail('Should have failed with 404 error'),
      (error: HttpErrorResponse) => {
        expect(error.status).toEqual(404);
        expect(error.error).toContain('404 error');
        expect(service.handleError).toHaveBeenCalledTimes(1);
      }
    );
    const request = httpMock.expectOne('api-url');
    request.flush('404 error', { status: 404, statusText: 'Not Found' });
    expect(request.request.method).toBe('POST');
  });

上午收到错误:预期的间谍 handleError 已被调用一次。它被调用了0次。

标签: angularrxjsjasminekarma-jasmineangular-unit-test

解决方案


推荐阅读