我有一个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);
    

    任何人都可以提出一种简洁的方法来实现这一目标吗?

    最佳答案

    我最终通过将HTTP调用提取到简单的 stub 中来解决了这个问题。这使我可以从服务中删除$ http并从单元测试中删除$ httpBackend,而是模拟 stub 以返回可以以任何顺序解析的promise。

    关于javascript - 如何以不同顺序刷新AngularJS $ httpBackend响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28305795/

    10-09 19:33