У меня есть функция async
, которая должна сделать запрос POST
, но сначала необходимо извлечь некоторые данные с сервера:
async createObject() {
// HTTP request #1: dep1 is needed for the second request
const dep1 = await this.http.get("/urlA")
.pipe(first())
.toPromise();
// Create the request object out of dep1 and some additional values
const req = mkCreateParams(this.name, dep1);
// HTTP request #2: Build something
const res = await this.http.post("/urlB")
.pipe(first())
.toPromise();
// When everything is done: Navigate away
this.router.navigateByUrl(`/urlC/${res.id}`);
return res;
}
Я использую следующий код для проверки этого :
const httpTesting = TestBed.inject(HttpTestingController);
const req = testInstance.createObject();
httpTesting
.expectOne("/urlA")
.flush({ /* ... SNIP ... */);
const generatedId = "f9f64792-0ceb-4e3c-ae7b-4c7a8af6a552";
httpTesting
.expectOne({ method: "POST", url: "/urlB" })
.flush({ id: generatedId });
const res = await req;
expect(res.id).toEqual(generatedId);
Сбой сразу же при ожидании /urlB
и даже не достигает линии, где разрешается res
. Сообщение об ошибке выглядит следующим образом:
Expected one matching request for criteria "Match method: POST, URL: /urlB", found none.
Возможно, это связано с тем, что при вызове HttpTestingController.expectOne()
должен был уже быть выполнен запрос. Поскольку обещания решаются с нетерпением в JavaScript, первый запрос уже сделан, а второй нет.
Есть ли способ сказать Angular HttpTestingController
немного расслабиться и подождать, пока просьба прийти через некоторое время? На это намекает существование HttpTestingController.verify
, но я понятия не имею, как попасть в состояние, в котором это было бы полезно.