首页 > 解决方案 > 如何对 rxjs shareReplay 进行单元测试?

问题描述

我正在尝试使用 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()

我可以添加一个计数器并尝试手动执行此操作,但这似乎不是最佳选择,因为它需要管理相当多的状态。

有任何想法吗?

标签: angularjasminerxjs

解决方案


似乎这是答案:

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

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


推荐阅读