Жасминовый тест «Uncaught HttpErrorResponse» не пройден - PullRequest
0 голосов
/ 12 марта 2020

У меня есть сервис с функцией поиска бразильского почтового индекса. Работает нормально. Но это не моя проблема.

public getAddress(cepAddress: string): Observable<any> {
        return this.http.get<any>(`${URL + cepAddress}/json/`).pipe(
            map((response: any) => {
                return response;
            }),
            catchError((error: HttpErrorResponse) => {
                return throwError(error);
            })
        );
    }

Я пытался проверить ответ об ошибке, но, видимо, у меня нет ошибки. Но когда я открываю консоль, у меня появляется одна ошибка «Uncaught HttpErrorResponse». Это сбивает мой тест и не создает никакого покрытия, потому что это. Я попытался следовать документации angular, в этом url , включая использование asyncError, но безуспешно. Ошибка может быть замечена здесь

enter image description here

Я успешно проверил случай ответа, но случай ошибки мне немного труден.

const ERRORRESPONSE = new HttpErrorResponse({
  error: 'test 404 error',
  status: 404, statusText: 'Not Found',
  url: 'fakeurl'
});
describe('CadastroService', () => {
  let httpClientSpy;
  let service: CadastroService;

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [HttpClientTestingModule]
    });
    httpClientSpy = jasmine.createSpyObj('HttpClient', ['post', 'get']);
    service = new CadastroService(httpClientSpy as any);
    // service = new CadastroService(<any> httpClientSpy);
  });
  it('should test getAddress error', () => {
    httpClientSpy.get.and.returnValue(throwError(ERRORRESPONSE));
    service.getAddress('09890430').subscribe((response) => {
      fail('getAddress error expected');
    }), (error: HttpErrorResponse) => {
      expect(error.status).toEqual(404);
      expect(error.error).toEqual('test 404 error');
    };
  });
});

Версии приложений

"@angular/core": "9.0.6",
"jasmine": "^3.5.0",
"jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1",

У меня есть приложение с очень похожей функцией и тестом, которые работают нормально, но это не так. Я бы хотел пройти тест по ошибке.

Спасибо

1 Ответ

0 голосов
/ 12 марта 2020

попробуйте вот так. Дайте мне знать, если это не работает.

beforeEach(() => {
        httpMock = TestBed.get(HttpTestingController);
    service = TestBed.get(CadastroService)
      });

    beforeEach(() => {
        TestBed.configureTestingModule({
          imports: [HttpClientTestingModule],
          providers : [CadastroService]

        });
    });


it('should test getAddress error', () => {
    const ERRORRESPONSE = new HttpErrorResponse({
      error: 'test 404 error',
      status: 404, statusText: 'Not Found',
      url: 'fakeurl'
    });
    service.getAddress('09890430').subscribe((response) => {
      fail('getAddress error expected');
    }, (error: HttpErrorResponse) => {
      expect(error.status).toEqual(404);
      expect(error.error).toEqual('test 404 error');
    });
    const req = httpMock.expectOne(`${URL + cepAddress}/json/`);
    expect(req.request.method).toEqual('GET');
    req.flush(ERRORRESPONSE);

    httpMock.verify();
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...