angular - 如何对 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()
我可以添加一个计数器并尝试手动执行此操作,但这似乎不是最佳选择,因为它需要管理相当多的状态。
有任何想法吗?
解决方案
似乎这是答案:
httpTestingController.expectOne('endpoint-called-from-async-operation');
https://angular.io/api/common/http/testing/HttpTestingController#expectone
推荐阅读
- javascript - 如何在 React 中制作正确的 JSON 循环
- bash - Git 通过 bash 脚本推送到各种存储库
- typescript - 如何将 DOM 声明为可能未定义
- polymer - 聚合物元素镭-datagrid-column,我需要自定义图标,其标题内有链接
- php - Laravel 上的搜索查询功能
- javascript - 来自浏览器的控制台中的密码破解程序(Javascript)
- java - Selenium Java:无法在#document 部分中找到元素
- xml - 创建一个旋钮 - 但是如何在另一个圆圈内偏移一个圆圈?
- prometheus - Prometheus:PromQL 减法,相同的标签,不同的值
- xaml - 如何以 xamarin 形式显示下拉菜单。IOS