如何以不同的顺序刷新 AngularJS $httpBackend 响应
How to flush AngularJS $httpBackend responses in different order
我有一个 AngularJS 服务,它执行 $http GET 请求并在本地缓存响应。它旨在处理同时发生的多个调用,以便仅缓存来自最终调用的数据。
具体来说,如果发生以下情况:
- 请求 A 开始
- 请求 B 已开始
- 请求 B 已完成
- 请求 A 已完成
结果缓存了请求B的响应,因为它是最后发起的。
但是我在 Jasmine 中对此进行单元测试时遇到了问题。
我可以设置两个 $httpBackend.expectGET() 期望,但我只能按照请求的顺序刷新它们。
基本上我需要能够做到这样的事情:
$httpBackend.expectGET('/one').respond(200, data1);
$httpBackend.expectGET('/two').respond(200, data2);
myService.doSomething('/one');
myService.doSomething('/two');
$httpBackend.flush('/two');
$httpBackend.flush('/one');
expect(myService.data).toBe(data2);
任何人都可以提出一个巧妙的方法来实现这一目标吗?
我最终通过将 HTTP 调用提取到简单的存根中解决了这个问题。这允许我从服务中删除 $http 并从单元测试中删除 $httpBackend,而是将存根模拟为 return 我可以按任何顺序解析的承诺。
我有一个 AngularJS 服务,它执行 $http GET 请求并在本地缓存响应。它旨在处理同时发生的多个调用,以便仅缓存来自最终调用的数据。
具体来说,如果发生以下情况:
- 请求 A 开始
- 请求 B 已开始
- 请求 B 已完成
- 请求 A 已完成
结果缓存了请求B的响应,因为它是最后发起的。
但是我在 Jasmine 中对此进行单元测试时遇到了问题。
我可以设置两个 $httpBackend.expectGET() 期望,但我只能按照请求的顺序刷新它们。
基本上我需要能够做到这样的事情:
$httpBackend.expectGET('/one').respond(200, data1);
$httpBackend.expectGET('/two').respond(200, data2);
myService.doSomething('/one');
myService.doSomething('/two');
$httpBackend.flush('/two');
$httpBackend.flush('/one');
expect(myService.data).toBe(data2);
任何人都可以提出一个巧妙的方法来实现这一目标吗?
我最终通过将 HTTP 调用提取到简单的存根中解决了这个问题。这允许我从服务中删除 $http 并从单元测试中删除 $httpBackend,而是将存根模拟为 return 我可以按任何顺序解析的承诺。