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 相关文章推荐
js有关元素内容操作小结
Dec 20 Javascript
使用jQuery实现星级评分代码分享
Dec 09 Javascript
JavaScript中setFullYear()方法的使用详解
Jun 11 Javascript
全面解析Bootstrap排版使用方法(文字样式)
Nov 30 Javascript
最丑的时钟效果!js canvas时钟制作方法
Aug 15 Javascript
vue2笔记 — vue-router路由懒加载的实现
Mar 03 Javascript
JavaScript屏蔽Backspace键的实现代码
Nov 02 Javascript
vscode下vue项目中eslint的使用方法
Jan 13 Javascript
React组件对子组件children进行加强的方法
Jun 23 Javascript
JavaScript实现的开关灯泡点击切换特效示例
Jul 08 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
Oct 31 Javascript
JavaScript canvas实现跟随鼠标事件
Feb 10 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
php数组添加元素方法小结
2014/12/20 PHP
帝国cms目录结构分享
2015/07/06 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
2016/03/28 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
2013/03/04 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
Bootstrap精简教程
2015/11/27 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
2016/05/25 Javascript
功能强大的Bootstrap效果展示(二)
2016/08/03 Javascript
node.js利用redis数据库缓存数据的方法
2017/03/01 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
微信小程序实现顶部选项卡(swiper)
2020/06/19 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
微信小程序websocket实现聊天功能
2020/03/30 Javascript
Node.js操作系统OS模块用法分析
2019/01/04 Javascript
layui 动态设置checbox 选中状态的例子
2019/09/02 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
python计算最大优先级队列实例
2013/12/18 Python
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
python使用pycharm环境调用opencv库
2018/02/11 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
python将控制台输出保存至文件的方法
2019/01/07 Python
pytorch 预训练层的使用方法
2019/08/20 Python
python 浅谈serial与stm32通信的编码问题
2019/12/18 Python
Ben Sherman官方网站:英国男装品牌
2019/10/22 全球购物
Perfume’s Club英国官网:购买香水和护肤品
2019/11/02 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
医药学专业大学生职业生涯规划书论文
2014/01/21 职场文书
户外用品商店创业计划书
2014/01/29 职场文书
党支部公开承诺书
2014/03/28 职场文书
旷工检讨书大全
2015/08/15 职场文书
实现一个简单得数据响应系统
2021/11/11 Javascript