- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试对使用 $resource
的 AngularJS 服务进行单元测试。为了保持其隔离,我想使用 Jasmine 的 spy On 并监视 $resource
的 query()
方法。在我的 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_AUTH
或 OAUTH_ERROR
,您的错误处理程序可使用它来提供更具体的响应。
关于javascript - Angular Jasmine SpyOn $resource 处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36297385/
我使用 File > Settings > JavaScript > Libraries 在 Webstorm 8.0.4 中设置 Jasmine 集成。我添加了 karma-jasmine带有我的
假设我有 spyOn($cookieStore,'get').and.returnValue('abc'); 对于我的用例来说,这太笼统了。任何时候我们打电话 $cookieStore.get('so
我正在阅读有关 Jasmine 测试的教程,它建议您应该使用标准 Jasmine 目录树结构(这似乎与 RSpec 目录树结构有关)。我用谷歌搜索了一个小时,找不到任何有关此标准目录树的信息。 考虑到
问题 如何使用Jasmine插件通过Jasmine运行Karma时更新所使用的karma-jasmine的版本? 仅当Jasmine插件集成了较新版本的karma-jasmine时,才会更新Jasmi
我想在每个规范执行后获得测试的通过或失败状态: var passed = jasmine.getEnv().currentSpec.results().passed(); if (!pas
我有一个与 Karma 一起运行的 Jasmine 测试: describe('When a logged in user chooses Rent and Payment PIN is enable
在我的新手理解中,Jasmine 提供了以下语法: describe('FooBar', function(){ it('should blah-blah', function(){ ex
我认为我通过编写这样的 Jasmine 模拟取得了很好的进展。但我无法修复这个错误。 spyOn 方法实际上是如何工作的?事实上这种方法似乎被广泛使用。 2.0 有什么变化 describe('Tes
有大量文档展示了如何将匹配器添加到 Jasmine 规范(例如 here )。 有人找到了向整个环境添加匹配器的方法吗?我想创建一组有用的匹配器,供任何和所有测试调用,而无需在我的规范中复制粘贴。 目
我正在尝试查找所有现有 Jasmine 期望匹配器(例如“toContain”等)的列表... 哪里可以找到这个?我搜索了一段时间,但找不到像 api 这样的东西。 Jasmine 网站也没有任何类型
我熟悉 python 单元测试测试,如果断言失败,该测试将被标记为“失败”,并继续进行其他测试。另一方面,即使其中一个失败, Jasmine 也会继续完成所有期望。如何让 Jasmine 在第一个期望
工具:Protractor 3.3.0、Jasmine 2.4.1、Selenium Standalone Server。 我有一个测试套件,里面有大量的 spec.js 文件,每个文件都包含我的应用
Jasmine 中是否有与 console.log 类似的方法?如果我想注销我 mock 的 $controller 或服务的值,有没有办法做到这一点? 最佳答案 您应该只使用 console.log
我已经通过运行 npm install jasmine -g 全局安装了 jasmine。 运行 jasmine -v 给我 jasmine v2.5.0 jasmine-core v2.5.0 然后
我有gulp-jasmine-phantom正在运行,但我得到 ReferenceError: Tictactoe is not defined 。我感觉我犯了一些根本性的错误。 我的文件结构: gu
我已经创建了一个 JavaScript 项目,需要使用 Jasmine 进行单元测试。我遵循了以下步骤: 1. npm install jasmine --save-dev - 从项目根目录 2.现在
我正在为我的应用程序使用 Yeoman+Angular Generator,我一直在努力与 Jasmine 相处!这就是我卡住的地方。我希望能够在 Jasmine 测试中使用 jQuery 选择器。我
it('should for something', function check(done) { browser.sleep(2000); $('.csTx').isPresent().th
Javascript 编码有点新,所以请耐心等待。 我阅读了以下链接 jasmine with jscoverage automated testing 但是,由于我没有 Ruby 项目,因此它似乎不
在Jasmine headless (headless)Webkit中运行测试时,我遇到了一个简单的TypeError: 'undefined' is not an object失败。但是没有提示在哪
我是一名优秀的程序员,十分优秀!