Как выполнить модульное тестирование rxjs shareReplay? - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь протестировать следующий сценарий для службы, используя метод shareReplay RxJS, который кэширует ответ, так что последующим подпискам не нужно совершать другой вызов:

it('should only make 1 http call for multiple subscriptions', () => {

  myService.doSomeAsyncOperation('ABCD').subscribe();
  myService.doSomeAsyncOperation('EFGH').subscribe();
  myService.doSomeAsyncOperation('IJKL').subscribe();

  // Expectation?

});

Может показаться, что для того, чтобы правильно это проверить, необходимо разоблачение какой-либо формы наблюдаемого состояния, например, .getCallsMade(), который можно использовать, чтобы сказать:

expect(myService.doSomeAsyncOperation('IJKL').subscribe().getHttpCallsMade() < 2).toBeTruthy()

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

Есть идеи?

1 Ответ

0 голосов
/ 17 января 2019

Кажется, это ответ:

httpTestingController.expectOne('endpoint-called-from-async-operation');

https://angular.io/api/common/http/testing/HttpTestingController#expectone

...