Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 控制如何处理$httpBackend.when()中的每个捕获_Angularjs_Unit Testing_Jasmine - Fatal编程技术网

Angularjs 控制如何处理$httpBackend.when()中的每个捕获

Angularjs 控制如何处理$httpBackend.when()中的每个捕获,angularjs,unit-testing,jasmine,Angularjs,Unit Testing,Jasmine,我正试图围绕我的angular项目构建一些jasmine单元测试。我遇到了一种情况,我不知道如何最好地解决 我使用了一个响应拦截器,如果它确定错误是401错误,它可以重试请求。它将调用以续订授权令牌,然后透明地重新发出请求 (原始呼叫)->401?(重新插入并重试):(返回失败) 我的问题在于: $httpBackend.whenPOST('/mymockedendpoint').respond(401, null); 这是我第一次查询它时想要的行为。但是,因为它还控制所有后续查询,所以我的令

我正试图围绕我的angular项目构建一些jasmine单元测试。我遇到了一种情况,我不知道如何最好地解决

我使用了一个响应拦截器,如果它确定错误是401错误,它可以重试请求。它将调用以续订授权令牌,然后透明地重新发出请求

(原始呼叫)->401?(重新插入并重试):(返回失败)

我的问题在于:

$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一样!感谢您强调这些差异,了解这些差异非常有用。