TEST:

  • Before you’ve written any of the code, you know how you want it to behave. You have a specification for its behavior.

为什么需要测试

  • 当我们给程序添加了新功能后,可以run test来判断,新代码是否破坏了原有的程序。
  • a well-writen test能帮助,其他开发者,更容易理清程序是如何工作的。

TDD: test-driven development

BDD:behavior-driven development

karma配置:

Karma 可以用来启动一个应用服务器,并在其中运行测试代码和需要被测试的源码,并把测试结果打印到命令行。

#1测试框架 jasmine:

suite 与 specs

  • 一个Suite(describe)包含多个Specs(it),一个Specs(it)包含多个断言(expect)。

    • npm install --save-dev karma-jasmine
    • jasmine 需要 required.js, karma init 时,是否需要required.js时,应该选 true。
    • Each spec should test only one case or scenario at a time.
Jasmine 细则
describe('unit test main controller:',function(){
                describe('inner method',function(){})
            } )
    it('',function(){
    expect().toBe(true);
    })

匹配器

  • toBe 使用js的 === 来比较
  • toEqual
  • toMatch
  • toBeDefined
  • toBeUndefined
  • toBeNull
  • toBeTruthy
  • toBeFalsy
  • toBeContain 验证一个item是否是数组中的一项
  • toBeLessThan
  • toBeGreaterThan
  • toBeCloseTo ???
  • toThrow

高级匹配器

spy
  • toHaveBeenCalled:可以检查function是否被调用过,
  • toHaveBeenCalledWith: 可以检查传入参数是否被作为参数调用过。

beforeEach() 和 afterEach()

  • 带有一个函数作为参数,这个函数在没个细则(it)运行前/后 执行。

#2 Requirejs A JAVAScript module loader

- requirejs
- karma-requirejs

其他必须的依赖:

- karma-chrome-launcher
- karma-cli  ????

Tips

这里karma环境一直配不好的一个重要原因是,对requirejs不熟悉

karma.config.js files应该注意的问题:

  • 顺序

    • 模式的顺序决定了文件在浏览器里被加载的顺序
    • 如果多个文件匹配到同一个模式,按字母顺序加载
    • 每个文件只被加载一次,如果多个模式匹配到同一个文件,由第一个匹配到的模式加载

angular.mock 模块

  • module() 函数允许我们指定测试中用到的特定模块
  • inject() 函数只负责一件事,就是将服务注入测试。

测试服务

测试控制器: 需要创建新的scope 和 控制器实例,并将它们连接起来。

mock对象和异步代码测试

  • $timeout.flush();

  • 10 10 2016 17:05:15.077:INFO [karma]: Delaying execution, these browsers are not ready: Chrome 53.0.2785 (Windows 10 0.0.0)

  • Chrome is executing

    • 出现上述两个error : 是因为没有karma init时 没有生成requirejs的 入口文件 test.main.js
  • Angular的依赖注入机制,是可测试的保障。当一个应用有很多的依赖关系时,怎么做单元测试呢?

    • 其实很简单,一个app能运行,它的依赖关系都是处理好的,我们在karma的files配置中,引入压缩好的js文件就ok了,不用再测试一个控制器时,再一个一个处理它的依赖关系。
  • 对应版本的Angular 要下载对应版本的angular-mocks.js ,不然会出现错误。

用Karma和Jasmine测试Angular应用的更多相关文章

  1. Karma和Jasmine自动化单元测试——本质上还是在要开一个浏览器来做测试

    1. Karma的介绍 Karma是Testacular的新名字,在2012年google开源了Testacular,2013年Testacular改名为Karma.Karma是一个让人感到非常神秘的 ...

  2. Karma:1. 集成 Karma 和 Jasmine 进行单元测试

    关于 Karma 会是一个系列,讨论在各种环境下,使用 Karma 进行单元测试. 本文讨论 karma 集成 Jasmine 进行单元测试. 初始化 NPM 实现初始化 NPM 包管理,创建 pac ...

  3. Karma和Jasmine自动化单元测试

    从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏 ...

  4. Karma和Jasmine 自动化单元测试环境搭建

    最近初学AngularJS ,看到的一些教程中经常有人推荐使用Karma+Jasmine来进行单元测试.自己之前也对Jasmine有些了解,jasmine也是一个不错的测试框架. 1. karma介绍 ...

  5. karma和jasmine的测试(包括angular测试)

    本篇博客主要就是针对现在日新月异的技术和快速开发,测试被很多人忽略,其实在开发中如何保证代码的质量以及逻辑的完整性,测试显得十分重要,本文就是负责karma+jasmine来测试. 1.搭建测试的环境 ...

  6. 基于Karma和Jasmine的AngularJS测试

    1:工程目录结构 y@y:karma-t01$ tree -L 3.├── client│   ├── app│   │   └── user│   ├── bower_components│   │ ...

  7. 基于karma和jasmine的Angularjs 单元测试

    Angularjs 基于karma和jasmine的单元测试 目录: 1. 单元测试的配置 2. 实例文件目录解释 3. 测试controller     3.1 测试controller中变量值是否 ...

  8. Angularjs 基于karma和jasmine的单元测试

    目录: 1. 单元测试的配置 2. 实例文件目录解释 3. 测试controller     3.1 测试controller中变量值是否正确     3.2 模拟http请求返回值,测试$http服 ...

  9. karma、jasmine做angularjs单元测试

    引用文:karma.jasmine做angularjs单元测试 karma和jasmine介绍 <1>技术介绍 karma karma是Testacular的新名字 karma是用来自动化 ...

随机推荐

  1. nginx 使用过程中一些基础性问题总结

    最近闲着无事,玩了下nginx.但本人在实践的过程中也遇到了一些问题,如,大家都知道应用服务器的处理都是无状态的,而nginx做了请求分发,我们在当前web服务器做得提交操作,可能下一刻就跑到另外一台 ...

  2. Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/mysql/var/AYXXXXXXXXXXX.pid). 错误解决方法

    /etc/init.d/mysql start无法启动MySQL错误信息如下: ERROR! MySQL server PID file could not be found! Starting My ...

  3. mac系统及xcode使用的SVN客户端升级

    mac系统及xcode使用的SVN客户端升级 当前的SVN版本已经升级到1.8.x了,但mac系统自带的以及xcode使用的SVN客户端版本没有跟着升级,还是1.6.x的版本.为了解决隐藏目录.svn ...

  4. 飘逸的python - 简明gzip模块压缩教程

    压缩数据创建gzip文件 先看一个略麻烦的做法 import StringIO,gzip content = 'Life is short.I use python' zbuf = StringIO. ...

  5. ON COMMIT PRESERVE ROWS

    定义声明式全局临时表的每个会话拥有自己的独特的临时表描述.当会话终止时,表行和临时表描述均会被删除. 有如下选项,可控制commit后临时表的状态: ON COMMIT DELETE ROWS:在执行 ...

  6. linux vi编辑常用命令

      linux vi编辑常用命令 来源:互联网 作者:佚名 时间:07-10 21:31:14 [大 中 小] linux vi编辑常用命令,需要的朋友可以参考下   vi编辑器中有三种状态模式 1. ...

  7. 模仿jQuery的filter方法

    对这类方法挺感兴趣的,因为方法的回调函数的返回值和jQuery变量好像没有什么关系.看了filter方法的源代码后,我就模仿了这个方法,自定义两个jQuery方法:some和every,类似于ES5新 ...

  8. D3.js:坐标轴

    坐标轴: 是可视化图表中经常出现的一种图形,由一些列线段和刻度组成.坐标轴在 SVG 中是没有现成的图形元素的,需要用其他的元素组合构成.D3 提供了坐标轴的组件,如此在 SVG 画布中绘制坐标轴变得 ...

  9. Qt-剪切板

    ClipBoard 存在的意义 进程间数据共享. 方式 Drag And Drop: clipBoard的拖曳方式 app's ClipBoard 缺点 没有权限管理 在Model View中实现Dr ...

  10. WHAT?【 $.fn.extend() 】vs【 $.extend() 】

    废话不多说,干货来了,转自http://www.cnblogs.com/hellman/p/4349777.html (function($){ $.fn.extend({ test:function ...