AngularJS 单元测试(二)详解


Posted in Javascript onSeptember 21, 2016

使用对象模拟注入

我们可以非常容易的使用angularjs的$provider服务用一个对象模拟一个依赖并且注入。

例子如下

angular.module('artists',[]).
  factory('Artists',['imageStore',function(imageStore){
    return {
      thumb:function(){
        return imageStore.thumbnailUrl(id)
      }
    }
  }])

如何实现

如何确定了服务

1、创建一个URL的引用,稍后会被mock捕获,和为Artists注入的一个变量

var URL;
var Artists;

2、紧接着在beforeEach方法中使用$provide 服务注册模拟的factory服务。使用一个对象模拟thumbnailUrl方法。

beforeEach(module(function($provide){
  $provide.value('imageStore',{
    thumbnailUrl:function(id){
      url='/thumb/'+id
    }
  })
})

3、使用$injector服务注入这个方法,返回这个Artists服务并且用刚才创建的的变量来声明,稍后可以使用到。

beforeEach(inject(function($inject){
  Artists=$inject.get('Artists');
 }))

4、调用Artists创建一个简单的测试

it('return the correct artist thumbnailUrl',function(){
  Artists.thumb('1');
  expect(url).toBe('/thumbs/1');
 })

5、这里有一个完整的使用$provide模拟测试例子,这返回一个定义了thumbnailUrl方法,

describe('factory:artists',function(){
  var url;
  var Artists;
  beforeEach(module('artist'));
  beforeEach(module(function($provide){
    $provide.value('imageStore',{
      thumbnailUrl: function (id) {
      url = '/thumbs/' + id;
      }  
    })
  }));
  beforeEach(inject(function($injector){
    Artists=$injector.get('Artists')
  }))
  it('return the correct artist thumbnailUrl',function(){
    Artists.thumb('1');
    expect(url).toBe('/thumb/1')
  })

 })

使用spec模拟注册实例

为了声明依赖注入的实例,下面声明一个例子,下面有两个服务,第二个服务被注入到了第一个里。

angular.module('hiphop',[])
  .factory('deejays',['$rootscope','scratch',function($rootscope,scratch){
    return{
      originator: 'DJ Kool Herc',
      technique: scratch.technique()
    }
  }])
  .factory('scratch',['$rootscope',function($rootscope){
    return{
      technique:function(){
        return 'breakbeat';
      }
    }
  }])

2、

describe('Service: deejays',function(){
  beforeEach(module('hiphop'));
  var deejays;
  beforeEach(inject(function($injector){
    deejays=$injector.get('deejays');
  }))
  beforeEach(inject(function($provide) {
    $provide.value('scratch',jasmine.createSpyObj('scratch', ['technique']));
  }));
  it('should return the correct originator',function(){
    expect(deejays.originator).toBe('DJ Kool Herc');
  })
 })

以上就是对AngularJS 单元测试的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

Javascript 相关文章推荐
JavaScript 克隆数组最简单的方法
Feb 12 Javascript
js substr支持中文截取函数代码(中文是双字节)
Apr 17 Javascript
Jquery操作js数组及对象示例代码
May 11 Javascript
js加密解密字符串可自定义密码因子
May 13 Javascript
jQuery中clone()方法用法实例
Jan 16 Javascript
移动端日期插件Mobiscroll.js使用详解
Dec 19 Javascript
Bootstrap如何激活导航状态
Mar 22 Javascript
Validform验证时可以为空否则按照指定格式验证
Oct 20 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
Dec 19 Javascript
jquery+css实现Tab栏切换的代码实例
May 14 jQuery
jQuery 选择器用法基础入门示例
Jan 04 jQuery
vue-router 按需加载 component: () => import() 报错的解决
Sep 22 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
Sep 21 #Javascript
AngularJS 单元测试(一)详解
Sep 21 #Javascript
vue.js+boostrap项目实践(案例详解)
Sep 21 #Javascript
AngularJS  ng-table插件设置排序
Sep 21 #Javascript
BooStrap对导航条的改造实践小结
Sep 21 #Javascript
AngularJs $parse、$eval和$observe、$watch详解
Sep 21 #Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
Sep 21 #Javascript
You might like
短波收音机简介
2021/03/01 无线电
PHP常用编译参数中文说明
2014/09/27 PHP
9段PHP实用功能的代码推荐
2014/10/14 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
2015/10/27 PHP
PHPStrom 新建FTP项目以及在线操作教程
2016/10/16 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
2016/11/25 PHP
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
动态为事件添加js代码示例
2009/02/15 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
2014/10/30 Javascript
JQuery中DOM实现事件移除的方法
2015/06/13 Javascript
动态加载JavaScript文件的两种方法
2016/04/22 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
2017/05/03 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
JavaScript实现身份证验证代码实例
2019/08/26 Javascript
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
2017/12/14 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
pip指定python位置安装软件包的方法
2019/07/12 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
2019/08/27 Python
Python基于WordCloud制作词云图
2019/11/29 Python
如何将json数据转换为python数据
2020/09/04 Python
详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用
2020/08/24 HTML / CSS
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
解释一下Windows的消息机制
2014/01/30 面试题
医学院护理专业应届生求职信
2013/11/12 职场文书
法定代表人授权委托书范文
2014/09/22 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
2015年度学校应急管理工作总结
2015/10/22 职场文书
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android