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 相关文章推荐
HTTP状态代码以及定义(解释)
Feb 02 Javascript
几个高效,简洁的字符处理函数
Apr 12 Javascript
js中的escape及unescape函数的php实现代码
Sep 04 Javascript
javascript div 弹出可拖动窗口
Feb 26 Javascript
jquery插件推荐 jquery.cookie
Nov 09 Javascript
详谈JavaScript 匿名函数及闭包
Nov 14 Javascript
jQuery插件bxSlider实现响应式焦点图
Apr 12 Javascript
jQuery滚动加载图片实现原理
Dec 14 Javascript
Bootstrap CSS布局之表单
Dec 17 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
Apr 01 Javascript
纯js实现的积木(div层)拖动功能示例
Jul 19 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
Sep 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 intval的测试代码发现问题
2008/07/27 PHP
php获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
PHP以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
phalcon model在插入或更新时会自动验证非空字段的解决办法
2016/12/29 PHP
laravel5.6实现数值转换
2019/10/23 PHP
最简单的js图片切换效果实现代码
2011/09/24 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
js实现prototype扩展的方法(字符串,日期,数组扩展)
2016/01/14 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
使用Python构建Hopfield网络的教程
2015/04/14 Python
Python 类的特殊成员解析
2018/06/20 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
python异步存储数据详解
2019/03/19 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
python IDLE添加行号显示教程
2020/04/25 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
2020/06/11 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
西班牙宠物用品和食品网上商店:Tiendanimal
2019/06/06 全球购物
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
创业计划书如何编写
2014/02/06 职场文书
计划生育证明格式范本
2014/09/12 职场文书
美丽人生观后感
2015/06/03 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
pytorch显存一直变大的解决方案
2021/04/08 Python
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android
python套接字socket通信
2022/04/01 Python
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android