Angular Jasmine SpyOn$resource处理错误
Angular Jasmine SpyOn $resource Handle Errors
我正在尝试对使用$resource
的AngularJS服务进行单元测试。为了将其隔离,我想使用Jasmine的spyOn并监视$resource
的query()
方法。在我的控制器中,我希望能够使用query()
的缩写,在这里,您可以将成功和错误函数直接传递给查询方法,而无需调用$promise.then(success, error)
。这可能吗,还是我一直使用query().$promise.then(success, error)
的长形式?
以下是我创建的一个失败测试的plunker,说明了我的问题:http://plnkr.co/edit/hVc2YNnwUDNv7IHODOMD?p=preview
我在SO上发现了几个问题,声称可以解决这个问题,但所有问题都使用了我正在使用的组件的旧版本。从plunker中,你可以看到我正在使用Angular 1.5.2和Jasmine 2.4.1。
作为一个相关的问题,许多教程显示,在控制器中,您只需将query()
的返回值分配给一个数组,当加载数据时,数组就会更新。这是最干净的解决方案,但如果出现错误会发生什么?我预计,如果加载数据时出现问题,您最终会收到一些默认的错误通知,或者什么都没发生。最好的做法是通过拦截器处理其他地方的错误,并可能触发事件并以某种通用的非控制器特定的方式通知用户吗?我认为拦截器需要某种方式来确定向用户显示什么消息以提供一些上下文,例如"Bagels的加载似乎比平时花费了更长的时间,单击此处重试",而不是"某个请求返回了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块。
我在angular应用程序中处理请求错误的方法是创建一个错误处理程序服务,该服务在catch块中被调用,并接收特定的错误消息并弹出一个模态。您可以根据需要对其进行配置:您可以定义模式按钮以重新加载或重定向等。为了处理消息,您可以将服务配置为返回问题代码,这些代码提供了对情况的描述,例如USER_IS_NOT_AUTH
或OAUTH_ERROR
,错误处理程序可以使用这些代码来提供更具体的响应。
- 是否存在Javascript Liferay Service库的文档?如何处理错误情况
- RxJS:在循环中处理错误.js自定义驱动程序
- 通过 AJAX 检索 Blob 时处理错误消息
- Chai正如承诺:当承诺抛出错误时,处理错误
- 如何处理错误'控制台未定义'在powershell中
- Bloodhound的新Typeahead是如何处理错误的
- 请求管道处理错误
- Angular Jasmine SpyOn$resource处理错误
- 如何或如何使用firebase有效地处理错误
- 以处理错误的方式启动javascript承诺蓝鸟链
- JavaScript Regex over CSS:如何处理错误的类
- 模态中的 Django 形式:动态重定向和处理错误
- 在 Angular 中使用拦截器处理错误的通用方法
- Angular JSON-RPC:处理错误
- AngularJS - 处理错误错误:[ng:areq] 在此特殊情况下 (?)
- 绕过 javascript 的 chrome 和 FF 后台选项卡处理错误
- 如何使用 Q 和 JS 捕获或失败来处理错误
- 使用 window.onerror 和 try-catch 块处理错误之间的差异
- jQuery $.get 在处理错误时返回白色错误页
- 处理错误后提交索引数据库事务