gpt4 book ai didi

javascript - Angular Jasmine SpyOn $resource 处理错误

转载 作者:行者123 更新时间:2023-12-03 07:18:38 25 4
gpt4 key购买 nike

我正在尝试对使用 $resource 的 AngularJS 服务进行单元测试。为了保持其隔离,我想使用 Jasmine 的 spy On 并监视 $resourcequery() 方法。在我的 Controller 中,我希望能够使用 query() 的简短形式,将成功和错误函数直接传递给查询方法,而无需调用 $promise.then(成功,错误)。这是可能的,还是我坚持使用 query().$promise.then(success, error) 的长形式?

这是我用失败的测试创建的一个plunker,说明了我的问题:http://plnkr.co/edit/hVc2YNnwUDNv7IHODOMD?p=preview

我在 SO 上发现了几个问题,声称可以解决问题,但所有问题都使用我正在使用的组件的旧版本。从 plunker 中您可以看到我正在使用 Angular 1.5.2 和 Jasmine 2.4.1。

作为一个相关问题,许多教程表明,在 Controller 中,您可以将 query() 的返回值分配给一个数组,并且在加载数据时,该数组将被更新。这是最干净的解决方案,但是如果发生错误会发生什么?我希望如果加载数据出现问题,您最终只会收到一些默认错误通知,或者根本没有发生任何事情。最佳实践是否是通过拦截器在其他地方处理错误,并可能触发事件并以某种通用的非 Controller 特定方式通知用户?我认为拦截器需要某种方式来确定向用户显示什么消息以提供一些上下文,例如“加载百吉饼似乎比平时花费更长的时间,单击此处重试”而不是“某些请求返回 500”状态码'

最佳答案

您应该仍然能够使用函数简写,将函数作为查询(成功,错误)传递。要修复单元测试,您需要考虑错误函数,如下所示:

 spyOn(mockBagelApiService, 'query').and.callFake(function(callback1, callback2) {
queryDeferred.promise.then(callback1);
queryDeferred.promise.catch(callback2);
return {$promise: queryDeferred.promise}
});

callFake 将接收您传递给 query() 的参数,这是两个表示成功和错误的函数。根据 Promise 是否已解决或拒绝,您需要使用适当的回调来处理 then 和 catch block 。

我在 Angular 应用程序中处理请求错误的方式是创建一个错误处理程序服务,该服务在 catch block 中调用,并接收特定的错误消息并弹出一个模式。您可以根据需要进行配置:您可以定义模式按钮来重新加载或重定向等。为了处理消息,您可以将服务配置为返回问题代码来描述情况,例如USER_IS_NOT_AUTHOAUTH_ERROR ,您的错误处理程序可使用它来提供更具体的响应。

关于javascript - Angular Jasmine SpyOn $resource 处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36297385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com