如何对rxjs shareReplay进行单元测试?

时间:2019-01-16 11:34:06

标签: angular jasmine rxjs

我正在尝试使用RxJS的shareReplay方法为服务测试以下情况,该方法缓存响应,以便后续订阅不需要再次调用:

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 :(得分:1)

似乎这是答案:

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

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