位置: 编程技术 - 正文

在JavaScript的AngularJS库中进行单元测试的方法(在javascript中)

编辑:rootadmin

推荐整理分享在JavaScript的AngularJS库中进行单元测试的方法(在javascript中),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:在javascript中用下面哪个关键字来定义变量,javascript包括在html中,&&在js中,javascript中,javascript中,在javascript中,在javascript中,在javascript的变量名严格区分大小写,内容如对您有帮助,希望把文章链接给更多的朋友!

开发者们都一致认为单元测试在开发项目中十分有好处。它们帮助你保证代码的质量,从而确保更稳定的研发,即使需要重构时也更有信心。

测试驱动开发流程图

AngularJS的代码声称其较高的可测性确实是合理的。单单文档中列出端对端的测试实例就能说明。就像AngularJS这样的项目虽然都说单元测试很简单但真正做好却不容易。即使官方文档中以提供了详尽的实例,但在我的实际应用中却还是很有挑战。这里我就简单示范一下我是怎么操作的吧.

Instant Karma

Karma 是来Angular团队针对JavaScript开发的一个测试运行框架。它很方便的实现了自动执行测试任务从而替代了繁琐的手工操作(好比回归测试集或是加载目标测试的依赖关系)Karma 和Angular的协作就好比花生酱和果冻.

只需要在Karma中定义好配置文件启动它,接下来它就会在预期的测试环境下的自动执行测试用例。你可以在配置文件中制定相关的测试环境。angular-seed,是我强烈推荐的可以快速实施的方案。在我近期的项目中Karma 的配置如下:

这个跟angular-seed的默认配置类似只不过有以下几点不同:

需要更改浏览器从Chrome 转到PhantomJS, 这样每次跳转时无需再打开新的浏览器窗口,但在OSX系统会有窗口延迟。所以这个插件还有浏览器设置都做了更改。 由于我的应用需要引用Google的Recaptcha服务因此添加了依赖的recaptcha_ajax.js小文件。这个小配置就像在Karma的配置文件中添加一行代码那么简单。

autoWatch确实是个很酷的设置,它会让Karma在有文件更改时自动回归你的测试用例。你可以这样安装Karma:

angular-seed 提供了一个简单的脚本inscripts/test.sh去触发Karma的测试。

用Jasmine设计测试用例

当使用Jasmine----一种行为驱动开发模式的JavaScript测试框架为Angular设计单元测试用例时大部分的资源都已可获取。

在JavaScript的AngularJS库中进行单元测试的方法(在javascript中)

这也就是我接下来要说的话题。

如果你要对AngularJS controller做单元测试可以利用Angular的依赖注入dependency injection 功能导入测试场景中controller需要的服务版本还能同时检查预期的结果是否正确。例如,我定义了这个controller去高亮需要导航去的那个页签:

如果想要测试isActive方法,我会怎么做呢?我将检查$locationservice 变量是否返回了预期值,方法返回的是否预期值。因此在我们的测试说明中我们会定义好局部变量保存测试过程中需要的controlled版本并在需要时注入到对应的controller当中。然后在实际的测试用例中我们会加入断言来验证实际的结果是否正确。整个过程如下:

使用整个基本的结构,你就能设计各种类型的测试。由于我们的测试场景使用了本地的环境来调用controller,你也可以多加上一些属性接着执行一个方法清除这些属性,然后再验证一下属性到底有没有被清除。

$httpBackendIs Cool

那么要是你在调用$httpservice请求或是发送数据到服务端呢?还好,Angular提供了一种

$httpBackend的mock方法。这样的话,你就能自定义服务端的响应内容,又或是确保服务端的响应结果能和单元测试中的预期保持一致。

具体细节如下:

正如你所见,beforeEach call其实都很类似,唯一不同的是我们是从injector获取$httpBackend而并非直接获取。即使如此,创建不同的测试时还会有一些明显的不同之处。对初学者来说,会有一个afterEachcall 方法来确保$httpBackend在每次用例执行后不会有明显的异常请求。如果你观察一下测试场景的设置和$httpBackend方法的应用就会会发现有那么几点不是那么直观的。

实际上调用$httpBackend的方法也算是简单明了但还不够——我们还得在传值给$scope.$apply的方法中把调用封装到实际测试中的$scope.runTest方法上。这样在$digest被触发后才能处理HTTP请求。而如你所见直到我们调用$httpBackend.flush()方法后$httpBackend才会被解析,这也就保证了我们能在调用过程中去验证返回的结果是否正确(在上面的示例中,controller的$scope.parseOriginalUrlStatusproperty属性将被传递给调用者,我们也因此能实时监控)

接下来的几行代码都是在调用过程中检测$scopethat属性的断言。很酷吧?

提示:在某些单元测试中,用户习惯把没有$的范围标记为变量。这个在Angular文档中并没有强制要求或是过分强调,只是我在使用中为了提高可读性和一致性才使用$scopelike这种方式。

结论

也许这就是我做起来对其他人而言只是自然而然能做到的事情之一,但是学习使用Angular编写单元测试一开始对我而言确实是相当痛苦的。我发现自己对如何开始的理解大多来自互联网上各种博客文章和资源的拼拼凑凑,没有真正一致或明确的最佳实践,而是通过自然而然随意的选择。我想针对我最终得到的成果提供一些文档,以帮助那些也许还在坑里面挣扎的其他人,毕竟他们只是想要编写代码而已,而非不得不去了解Angular和Jasmine中所有的怪异特性和独特用法。因此我希望这篇文章能对你有些许帮助。

对JavaScript的全文搜索实现相关度评分的功能的方法 全文搜索,与机器学习领域其他大多数问题不同,是一个Web程序员在日常工作中经常遇到的问题。客户可能要求你在某个地方提供一个搜索框,然后你

JavaScript中的Promise使用详解 许多的语言,为了将异步模式处理得更像平常的顺序,都包含一种有趣的方案库,它们被称之为promises,deferreds,或者futures。JavaScript的promises,可以促

JavaScript面对国际化编程时的一些建议 什么是国际化?国际化(Internationalization的缩写是in——i,中间个字符,n)是将软件处理的能让来自各种地方使用各种语言的用户更简单使用的一个过

标签: 在javascript中

本文链接地址:https://www.jiuchutong.com/biancheng/380453.html 转载请保留说明!

上一篇:简述AngularJS相关的一些编程思想(angularjs常用总结)

下一篇:对JavaScript的全文搜索实现相关度评分的功能的方法(javascript的对象有哪些)

  • 机票和发票是一样的吗
  • 平行结转分步法各步骤的费用
  • 小规模纳税人自动升为一般纳税人条件
  • 会计工资标准
  • 新公司开基本户银行选择
  • 自然人扣缴是什么意思
  • 累计所得税前净现金流量计算公式为
  • 土地增值税属于所得税类
  • 本月实现利润总额的25%计算并结转应交所得税
  • 事业单位取得了应税收入如何纳税?
  • 一般纳税人能开3%的专票吗
  • 背书出去的票据信息在哪里查询
  • 存货中的生产成本是指
  • 资产负债中应交税费怎么算
  • 银行代扣社保怎么做会计分录
  • 离职有补偿金的可不可以领取失业金
  • 从租计征的房产税纳税义务发生时间
  • 技术转让所得减半征收企业所得税
  • 如何降低融资成本率
  • 房地产会计工资一般多少
  • 换购商品分录怎么做
  • 单位补扣社保如何操作
  • 抵免法的缺点主要有以下几点
  • 小微企业所得税税收优惠政策2023年
  • 公司向股东借款多久必须归还
  • 小规模纳税人无票收入怎么申报
  • 季度报表本期金额和累计金额
  • 点云入门
  • 发票取得取得售卡方公司开具的增值税专用发票
  • 企业所得税中哪些属于免税收入
  • 诉讼代理费计入事业单位什么科目
  • 进项税转出金额是发票上的哪个
  • 收到借款利息收入的会计分录怎么做账
  • 帝国cms采集标签
  • python idle有什么用
  • 为什么很多公司选择股票上市
  • 函数的单调性
  • 帝国cms会员发布信息数量
  • python中exec执行如何获取返回值
  • 非正常户管理办法
  • 软件无形资产摊销年限
  • 资金账簿印花税减半政策
  • 疫情期间制造费用账务处理
  • 公司缴纳的残保金是什么
  • 收到银行承兑汇票怎么兑现
  • 普通发票做账需要价税分离吗
  • 高新技术企业研发费用占比要求
  • 当月发生逾期押金收入12870元
  • 淘宝商城的收入来源
  • 免增值税进项税怎么弄
  • 免增增值税的有
  • 企业购入投资性房地产
  • 结算本月职工工资,其中生产甲产品
  • 当期不得免征和抵扣税额
  • 购进农产品抵扣的税率
  • 高新技术企业财务指标
  • 怎么把应付账款冲平
  • 生产成本和制造费用期末有余额吗
  • mysql删除表数据怎么恢复
  • 一些文件未注册怎么删除
  • bhvc.exe
  • 手机更新升级版本下载
  • Linux Shell 通配符、元字符、转义符使用实例介绍
  • linux端口流量监控
  • win8系统崩溃无法开机
  • win10系统中怎么重新启动netframework
  • win7怎么调图片大小
  • js opendialog
  • adt Failed to create the Java Virtual Machine.
  • linux中xargs的含义
  • Unity3D游戏开发(第2版)pdf
  • JavaScript运算符中谁拥有最高优先级
  • css设置段落
  • js parsejson
  • unity中ngui
  • 陕西国税电子税务局端还可以登录吗
  • 北京大兴开发区房价
  • 国税 地税比例
  • 税务意识形态工作主要内容有哪些
  • 广东个体户年报微信申报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设