Angular: тестирование HttpMock с несколькими параметрами ожидаем, что завершение не выполнено - PullRequest
0 голосов
/ 04 мая 2020

У меня есть сервис в Angular, который принимает 3 параметра. [У меня были проблемы с HttpParams при использовании append (), поэтому я просто использовал параметр fromObject в конструкторе. Может выглядеть странно, но пока это работает.]

Сервисный код

getData(paramOne: string, paramTwo, string: paramThree: number): Observable<Object[]> {
  const obj = {};
  obj['p1'] = paramOne;
  obj['p2'] = paramTwo;
  obj['p3'] = paramThree;
  let params = new HttpParams({fromObject; obj});
  return this.httpClient.get<Object[]>('myurl', {params: params})
}

Это работает. На стороне сервера я могу получить параметры из запроса. Без вопросов.

Однако в модульном тесте с HttpMock () у меня возникают проблемы.

// httpMock = new TestBed.get(HttpTestingController)

it('should get data', (done) => {
  const data = {};
 // populate simulated return data

 service.getData("param1", "param2", 3).subscribe(data => {
  // tests here
 });

 const req = httpMock.expectOne('myurl?p1=param1&p2=param2&p3=3');
 expect(req.request.method).toBe('GET');
 req.flush(data);
 httpMock.verify();
});

Сбой вызова httpMock.epectOne ()

Expected one matching request for criteria "call to api", found none.

I ' мы пробовали это с нулевым и 1 параметрами, и шаблон работает. Я проверил на опечатки и еще много чего. Утомительно ... что-то, что я пропускаю, или способ поближе взглянуть на то, к чему фактически обращается URL?

1 Ответ

0 голосов
/ 05 мая 2020

Итак, настоящая проблема в этом случае состояла в том, что у меня был двухбайтовый символ в URL, и это был URL, закодированный с другой стороны. Я запускаю тест против литерала. Довольно расстраивает. Я смог понять это, следуя предложению использовать matchFunction в этой теме , которая имеет хороший пример.

...