确保$httpBackend刷新一系列请求



我需要测试在 Angular 1.5.9 下用茉莉花/业力实现的内部角度服务。

我需要编写一个测试来检查特定服务函数的响应是否符合预期。为此,我正在构造一个模拟对象,实例化服务,调用要测试的函数并使用expect().toBe()来检查返回的值。

不幸的是,该服务对其自己的函数进行了大量调用,其中许多调用使用$httpangular 服务进行进一步调用。它这样做是为了填充对象,例如用户数据、区域设置和其他定制产品信息。可以说,我无法将服务重构为更好的体系结构;我必须简单地构建这个测试。

由于对$http的调用太多,我打算使用一系列行来模拟它请求的所有数据,如下所示:

var mockGetCartData = { "d": null, "message": null }; // at the top of the describe
$httpBackend.when('GET', /(.*)/order/api/v1/GetCart/).respond(200, mockGetCartData); // in the beforeEach

当我调用要测试的函数时,我会立即调用$httpBackend.flush()但是,由于测试失败,我担心我需要做的是导致每个(伪造的)$http调用在进行下一次调用之前被刷新。

我是否需要执行此操作,或者是否设置所有$httpBackend.when().respond()条目,对测试函数进行操作,然后调用单个flush()就足够了?如果这还不够,我该怎么办?

您无需为发出的每个请求调用flush(),因为它会刷新所有挂起的请求。

请参阅文档:https://docs.angularjs.org/api/ngMock/service/$httpBackend

来源:https://github.com/angular/angular.js/blob/master/src/ngMock/angular-mocks.js#L1830

但是,如果所测试方法中的$http个请求链接在一起(因此后续请求仅在解决前一个请求后发出),则需要为链中的每个请求flush()。在没有看到测试中的代码的情况下,这就是我能够提供的所有帮助。

您必须模拟 It 块中唯一需要的 http 调用,并在函数调用后刷新它。否则,它将尝试刷新意外的 http 调用,这将导致错误。

最新更新