Я хотел бы проверить трубопроводный вызов HttpClient, но кажется, что вызов http не завершается вовремя и ответа нет.
configuration.service.ts
public loadData() {
return this.configurationService.getAppConfig().pipe(
switchMap(appConfig => this.http.get<string[]>("url"))
);
}
configuration.service.spe c .ts
let service: CustomService;
let httpTestingController: HttpTestingController;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
CustomService,
{ provide: ConfigurationService, useClass: MockedConfigurationService }
],
imports: [HttpClientTestingModule],
});
httpTestingController = TestBed.get(HttpTestingController);
service = TestBed.get(ConfigurationService);
});
it("should make a get request for loadData", () => {
service.loadData().subscribe(data => {
// This is not called
console.log(data);
});
const req = httpTestingController.expectOne("url");
req.flush(["my.data"]);
expect(req.request.method).toEqual("GET");
httpTestingController.verify();
});
Все работает нормально, если я просто возвращаю запрос как
return this.http.get<string[]>("url");
Я также пытался использовать созданные / завершенные manullay Observables, но подписка не вызывалась для httpClient:
const appConfig$ = this.configurationService.getAppConfig();
return new Observable(observer => {
appConfig$.subscribe(appConfig => {
this.http.get<string[]>("url").subscribe(
result => {
observer.next(result);
observer.complete();
}
);
});
});
Что я делаю не так? Похоже, что тестовый пример заканчивается до того, как httpClient сможет завершить.