Запрос Jasmine unit test не вызывает ошибку sh при проверке HTTP-ошибки в качестве ответа - PullRequest
2 голосов
/ 05 мая 2020

Я пытаюсь отправить sh ответ с ошибкой http 400 с помощью HttpTestingController. Однако он, кажется, никогда не сбрасывается, поскольку делегат подписки никогда не вызывается.
Регистрация свойства _cancelled объекта запроса указывает, что возврат http-ошибки 400 приводит к тому, что для свойства _cancelled устанавливается значение true. Я хотел бы, чтобы в метод службы был передан ответ об ошибке, чтобы можно было проверить обработку кодов ошибок http.

Тест:

  it('routes to error page when get roles receives an error', async(inject(
    [AgentManagementService, HttpTestingController],
    (service: AgentManagementService, backend: HttpTestingController) => {
      service.GetAgentPortalRoles().subscribe( (response) => {
        console.log(response);  // never gets called
        expect(1).toBe(1);
      });

      const request = backend.expectOne(environment.urlBase + 'v1/account/roles');
      expect(request.cancelled).toBeFalsy();
      console.log(request.cancelled); // is true
      request.flush( {}, { status: 400, statusText: 'Bad Request'});
      console.log(request.cancelled); // is false
    }
  )));

Функция в тестируемой службе :

  public GetAgentPortalRoles(): Observable<Array<string>> {
    return this.http.get<RolesResponse>(API_URL + 'v1/account/roles', { observe: 'response', headers })
      .pipe(
        map( response => {
          if (response.ok) {
            return response.body.roles;
          }
          this.router.navigateByUrl('/error');
          return null;
        }),
        catchError( () => {
          this.router.navigateByUrl('/error');
          return EMPTY;
        })
      );
  }
...