如何以不同的顺序刷新AngularJS $ httpBackend响应

时间:2015-02-03 18:08:28

标签: javascript angularjs unit-testing jasmine httpbackend

我有一个AngularJS服务,它执行$ http GET请求并在本地缓存响应。它旨在处理同时发生的多个调用,以便仅缓存来自最终调用的数据。

具体而言,如果发生以下情况:

  • 申请开始
  • 请求B已启动
  • 请求B已完成
  • 请求已完成

结果是请求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);

有人能建议一个简洁的方法来实现这个目标吗?

1 个答案:

答案 0 :(得分:2)

我最终通过将HTTP调用解压缩为简单存根来解决这个问题。这允许我从单元测试中删除服务和$ httpBackend中的$ http,而是模拟存根以返回我可以按任何顺序解析的promise。