用Karma和Jasmine测试Angular应用
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应用的更多相关文章
- Karma和Jasmine自动化单元测试——本质上还是在要开一个浏览器来做测试
1. Karma的介绍 Karma是Testacular的新名字,在2012年google开源了Testacular,2013年Testacular改名为Karma.Karma是一个让人感到非常神秘的 ...
- Karma:1. 集成 Karma 和 Jasmine 进行单元测试
关于 Karma 会是一个系列,讨论在各种环境下,使用 Karma 进行单元测试. 本文讨论 karma 集成 Jasmine 进行单元测试. 初始化 NPM 实现初始化 NPM 包管理,创建 pac ...
- Karma和Jasmine自动化单元测试
从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏 ...
- Karma和Jasmine 自动化单元测试环境搭建
最近初学AngularJS ,看到的一些教程中经常有人推荐使用Karma+Jasmine来进行单元测试.自己之前也对Jasmine有些了解,jasmine也是一个不错的测试框架. 1. karma介绍 ...
- karma和jasmine的测试(包括angular测试)
本篇博客主要就是针对现在日新月异的技术和快速开发,测试被很多人忽略,其实在开发中如何保证代码的质量以及逻辑的完整性,测试显得十分重要,本文就是负责karma+jasmine来测试. 1.搭建测试的环境 ...
- 基于Karma和Jasmine的AngularJS测试
1:工程目录结构 y@y:karma-t01$ tree -L 3.├── client│ ├── app│ │ └── user│ ├── bower_components│ │ ...
- 基于karma和jasmine的Angularjs 单元测试
Angularjs 基于karma和jasmine的单元测试 目录: 1. 单元测试的配置 2. 实例文件目录解释 3. 测试controller 3.1 测试controller中变量值是否 ...
- Angularjs 基于karma和jasmine的单元测试
目录: 1. 单元测试的配置 2. 实例文件目录解释 3. 测试controller 3.1 测试controller中变量值是否正确 3.2 模拟http请求返回值,测试$http服 ...
- karma、jasmine做angularjs单元测试
引用文:karma.jasmine做angularjs单元测试 karma和jasmine介绍 <1>技术介绍 karma karma是Testacular的新名字 karma是用来自动化 ...
随机推荐
- C# BackgroundWorker详解,图例,原理分析
先声明,大部分资料均参考网上,进行了整理. 1. 在 VS 中添加了 BackgroundWorker 组件, 该组件在多线程编程方面使用起来非常 方便,然而在开始时由于没有搞清楚它的使用机制, 走了 ...
- Caffe Ubuntu14.04 64位 的最快安装 (cuda7.5 + cudnn7.0 2016最新)
最近因为各种原因,装过不少次Caffe,安装过程很多坑,为节省新手的时间,特此总结整个安装流程. 关于Ubuntu 版本的选择,建议用14.04这个比较稳定的版本,但是千万不要用麒麟版!!!比原版体验 ...
- 一步一步深入spring(3)--spring的依赖注入方式
对于spring配置一个bean时,如果需要给该bean提供一些初始化参数,则需要通过依赖注入方式,所谓的依赖注入就是通过spring将bean所需要的一些参数传递到bean实例对象的过程,sprin ...
- 单例模式及C++实现代码
单例模式及C++实现代码 单例模式 单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目.但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能 ...
- 《Head First Python》学习笔记03 异常处理
异常(运行时错误): 当代码逻辑遇到意外事件时,比如打开一个文件,却发现文件不存在.这时是增加额外的代码处理逻辑,还是捕获异常呢?答案是:Python优先推荐捕获异常,然后恢复. Python异常机制 ...
- Hibernate的clear(),flush(),evict()方法详解
1.Clear 方法 无论是Load 还是 Get 都会首先查找缓存(一级缓存) 如果没有,才会去数据库查找,调用Clear() 方法,可以强制清除Session缓存. 例: 这里虽然用了2个get方 ...
- cf 323A A. Black-and-White Cube 立体构造 不知道为什么当k为奇数时构造不出来 挺有趣的题目吧
A. Black-and-White Cube time limit per test 1 second memory limit per test 256 megabytes input stand ...
- Python各种花式截图工具,截到你手软
前言: 最近,项目中遇到了一个关于实现通过给定URL,实现对网页屏幕进行截图的一个功能,前面代码中已经用python的第三方库实现了截图功能,但在上线以后出现了一些bug,所以就改bug的任务就落在了 ...
- PHP里文件的查找方式及写法
PHP里说的文件包括:文件和目录1.用filetype方法加路径("./11.txt")是判断文件类型 //var_dump(filetype("./11.txt&quo ...
- 浅谈linux读写同步机制RCU
RCU是linux系统的一种读写同步机制,说到底他也是一种内核同步的手段,本问就RCU概率和实现机制,给出笔者的理解. [RCU概率] 我们先看下内核文档中对RCU的定义: RCU is a sync ...