HttpTestingController не работает с HTTP_INTERCEPTORS - PullRequest
0 голосов
/ 10 сентября 2018

Что необходимо сделать в этом тесте, ожидается, что запрос успешно достигнет backend (в данном случае HttpTestingController), а между клиентом и бэкэндом перехватчики перехватывают запрос.Перехватчики проверяют и устанавливают условия перед тем, как включить или удерживать их до тех пор, пока они не будут выполнены.

Для текущей проблемы, если к поставщикам добавлено HTTP_INTERCEPTORS, HttpTestingController aka mockBackend перестает работать и не может использовать отладчики любые примеры, чтобы показать, почему это может быть проблемой.Сообщение об ошибке дает карма.

Error: Expected one matching request for criteria "Match URL: /example", found none.

После удаления HTTP_INTERCEPTORS в провайдере он снова начинает работать, но у меня нет доступа к interceptorService и я не могупроверьте некоторые условия.Наконец, перехватчик, кажется, не работает в модульном тесте, может быть, у меня слишком много слоев между моим home.component.ts и моим interceptorService.

Я смотрел на этот вопрос о stackoverflow , но я считаю, что порядок, который я назвал, правильный, и я использую пример из этой ссылки , чтобы создать свой тест с перехватчиком.

http.service.ts

refreshSession(): Promise<boolean> {
 return http.get(url, {}).then(()=>true).catch(()=>false);
}

app.spec.ts

beforeEach(() => {
 TestBed.ConfigureTestingModule({
  declarations: [ home.spec.ts ],
  imports: [ HttpClientTestingModule ],
  providers: [
   interceptorService,
   {
    provide: HTTP_INTERCEPTORS,
    useClass: interceptorService,
    multi: true,
   },
  ],
 });
  http = TestBed.get(HttpService);
  interceptor = TestBed.get(interceptorService);
  mockBackend = TestBed.get(HttpTestingController);
});

it('http requests make to the end', () => {
    http.refreshSession().then(hasRefreshed => {
      expect(hasRefreshed).toBeTruthy();
    });
    let header = new HttpHeaders();
    header = header.append('token', 'abc');
    let response = new HttpResponse({
      status: 200,
      headers: header,
    });
    interceptor.token = '123';
    expect(interceptor.token).toBeDefined();
    let backend = mockBackend.expectOne({
      url: '/example',
      method: 'GET',
    });
    backend.flush(response);
  });
...