Angularjs 确保一系列请求的$httpBackend刷新

Angularjs 确保一系列请求的$httpBackend刷新,angularjs,karma-jasmine,httpbackend,Angularjs,Karma Jasmine,Httpbackend,我需要用jasmine/karma测试angular 1.5.9下实现的内部angular服务 我需要编写一个测试来检查特定服务函数的响应是否符合预期。为此,我正在构造一个模拟对象,实例化服务,调用要测试的函数,并使用expect().toBe()检查返回值 不幸的是,该服务对自己的函数进行了大量调用,其中许多函数使用$httpangular服务进行进一步调用。它这样做是为了填充对象,如用户数据、区域设置和其他定制产品信息。只需说,我无法将服务重构为更好的体系结构;我必须简单地构造这个测试 由于

我需要用jasmine/karma测试angular 1.5.9下实现的内部angular服务

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

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

由于对
$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()
就足够了?如果这还不够,我该怎么办?

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

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

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

请参阅文档

来源


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

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

请参阅文档

来源

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