Angularjs 控制如何处理$httpBackend.when()中的每个捕获
我正试图围绕我的angular项目构建一些jasmine单元测试。我遇到了一种情况,我不知道如何最好地解决 我使用了一个响应拦截器,如果它确定错误是401错误,它可以重试请求。它将调用以续订授权令牌,然后透明地重新发出请求 (原始呼叫)->401?(重新插入并重试):(返回失败) 我的问题在于:Angularjs 控制如何处理$httpBackend.when()中的每个捕获,angularjs,unit-testing,jasmine,Angularjs,Unit Testing,Jasmine,我正试图围绕我的angular项目构建一些jasmine单元测试。我遇到了一种情况,我不知道如何最好地解决 我使用了一个响应拦截器,如果它确定错误是401错误,它可以重试请求。它将调用以续订授权令牌,然后透明地重新发出请求 (原始呼叫)->401?(重新插入并重试):(返回失败) 我的问题在于: $httpBackend.whenPOST('/mymockedendpoint').respond(401, null); 这是我第一次查询它时想要的行为。但是,因为它还控制所有后续查询,所以我的令
$httpBackend.whenPOST('/mymockedendpoint').respond(401, null);
这是我第一次查询它时想要的行为。但是,因为它还控制所有后续查询,所以我的令牌更新可以工作,然后重新发出这个请求,但它不会像在生产中那样返回200,而是返回401
如何在POST时扩展对该的处理,以便控制某种处理程序中的行为?这可能吗
现在执行我的测试会产生一个无限循环,因为两者都会重新发出请求(因为它成功地更新了令牌)并再次捕获,因为准200请求返回401)。您可以使用“expect”版本,而不是使用基于“when”的$httpBackend
函数。这将允许您断言特定请求是按照特定顺序发出的。下面的示例很好地描述了这些差异:
$httpBackend.expect-指定请求期望值
$httpBackend.when-指定后端定义
请求期望与后端定义
请求期望提供了一种方法
对应用程序发出的请求进行断言,并
定义这些请求的响应。如果测试失败,则测试将失败
未提出预期的请求或请求顺序错误
后端定义允许您为您的应用程序定义假后端
不断言是否发出了特定请求或
不是,它只是在发出请求时返回一个经过训练的响应。测试
将通过测试期间是否发出请求
鉴于此,请在测试中尝试以下方法:
$httpBackend.expectPOST('/mymockedendpoint').respond(401, null);
$httpBackend.expectPOST('/mymockedendpoint').respond(200, { });
$httpBackend.flush();
另外,请注意函数$httpBackend.resetExpectations()
,它在这种情况下可能很有用。的工作原理与champ一样!感谢您强调这些差异,了解这些差异非常有用。