浅谈Jasmine的安装和拆卸
单元测试中,我们通常需要在执行测试代码前准备一些测试数据,建立测试场景,这些为了测试成功而所做的准备工作称为Test Fixture。而测试完毕后也需要释放运行测试所需的资源。这些铺垫工作占据的代码可能随着测试复杂度的增加而增加。为了避免在每个测试用例里重复这些代码,测试框架一般都会提供安装(Setup)和拆卸(Teardown)函数。
Jasmine提供了4个全局函数用于安装和拆卸:
函数名称 | 描述 |
beforeEach | 在每一个测试用例执行之前都执行一遍beforeEach函数 |
afterEach | 在每一个测试用例执行完成之后都执行一遍afterEach函数 |
beforeAll | 在测试套件中所有测试用例执行之前执行一遍beforeAll函数 |
afterAll | 在测试套件中所有测试用例执行完成之后执行一遍afterAll函数 |
这些函数接受一个回调函数作为参数,执行相关的安装代码和拆卸代码。例如:
describe(‘Player’, function() {
var player;
beforeEach(function() {
player = new Player();
});
afterEach(function() {
/* cleanup code */
});
it(‘should be able to play a Song’, function() {
/* code and assertions */
});
});
在Jasmine中describe块可以嵌套,所以测试用例可以定义在任何一层describe块里。理解Jasmine安装和拆卸函数在嵌套describe情况下的执行顺序,有助于合理组织测试用例。
我们使用以下这个例子:
describe('Jasmine Execution Sequence', function () {
beforeAll(function () {
console.log('outer beforeAll');
});
beforeEach(function () {
console.log('outer beforeEach');
});
it('spec 1', function () {
console.log('spec 1');
});
console.log('statement 1');
describe('inner', function () {
beforeAll(function () {
console.log('inner beforeAll');
});
afterAll(function () {
console.log('inner afterAll');
});
console.log('statement 3');
beforeEach(function () {
console.log('inner beforeEach');
});
it('spec 3', function () {
console.log('spec 3');
});
afterEach(function () {
console.log('inner afterEach');
});
});
it('spec 2', function () {
console.log('spec 2');
});
console.log('statement 2');
afterEach(function () {
console.log('outer afterEach');
});
afterAll(function () {
console.log('outer afterAll');
});
});
输出结果如下:
statement 1
statement 3
statement 2
outer beforeAll
outer beforeEach
spec 1
outer afterEach
inner beforeAll
outer beforeEach
inner beforeEach
spec 3
inner afterEach
outer afterEach
inner afterAll
outer beforeEach
spec 2
outer afterEach
outer afterAll
以上示例有这样的输出结果是因为:
- Jasmine会先执行describe块的代码,然后再执行beforeAll,beforeEach和it函数。所以“statement 1”,“statement 3”,“statement 2”首先被输出。
- describe块的代码从上到下依次执行。尽管console.log('statement 2')在外层describe块里,但是它还是排在内层describe块的console.log('statement 3')后面执行。
- beforeAll会在它所在describe块的测试用例和beforeEach执行前执行,而且只执行一次。
- beforeEach会在它所在describe块和内层describe块里的测试用例执行前被执行。所以“outer beforeEach”会在外层的测试用例“spec 1”之前执行,也会在内层的测试用例“spec 3”之前执行。而“inner beforeEach”只会在“spec 3”之前执行。
- 在每个测试用例执行前,Jasmine会从最外层的describe块开始,顺序执行每个beforeEach,直到这个测试用例所在的describe块为止。所以在执行测试用例“spec 3”之前,Jasmine先执行“outer beforeEach”,然后执行“inner beforeEach”。
- 测试用例会从上到下依次执行。虽然“spec 2”在外层,但是它还是在内层的测试用例“spec 3”后面执行。
- 测试用例执行完后,Jasmine会执行测试用例所在describe块的afterEach,然后依次执行外层的afterEach,直至最外层describe块。例如在“spec 3”测试用例完成后,“inner beforeEach”会先被执行,然后是“outer afterEach”。
- afterAll会在它所在describe块的测试用例和afterEach执行后执行,而且只执行一次。
浅谈Jasmine的安装和拆卸的更多相关文章
- 浅谈Redis及其安装配置
一.Redis的介绍 二.Redis的安装配置 三.Redis的配置文件说明 四.Redis的简单操作 简介: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型. ...
- 浅谈 zookeeper 原理,安装和配置
当前云计算流行, 单一机器额的处理能力已经不能满足我们的需求,不得不采用大量的服务集群.服务集群对外提供服务的过程中,有很多的配置需要随时更新,服务间需要协调工作,那么这些信息如何推送到各个节点?并且 ...
- 我的QT5学习之路(一)——浅谈QT的安装和配置
一.前言 说到Qt,不能不说到C++,这门伟大的语言.因为其面向对象的编程思想和陡峭的学习曲线,一开始学习起来很是吃力.Qt从QT4开始基本封装了很多C++的工具库和界面库,而且支持跨平台,这是它最大 ...
- 浅谈scrapy框架安装使用
Scrapy笔记: 一 安装: pip3 install wheel pip3 install lxml pip3 install pyopenssl pip3 install -i https:// ...
- 安装JDK后JRE与JVM联系浅谈
转自安装JDK后JRE与JVM联系浅谈 安装JDK后JRE.JVM之间的关系是什么呢?那么我们要从安装JDK慢慢说起. 如果安装了JDK,会发同你的电脑有两套JRE: 一套位于 <JDK安装目录 ...
- Linux CentOS下MySQL的安装配置之浅谈
前期必备安装:VMware虚拟机,CentOS镜像[注意:Linux下使用CentOS MySQL是不用在官网下载的,只需要配置就OK了] 下面开始正式操作: //CentOS安装MySQL之浅谈 ...
- 浅谈angular2+ionic2
浅谈angular2+ionic2 前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别. 1. 项目所用:angular2+ionic2 ...
- 浅谈Hybrid技术的设计与实现第二弹
前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 接上文:浅谈Hybrid技术的设计与实现(阅读本文前,建议阅读这个先) ...
- 浅谈Hybrid技术的设计与实现
前言 浅谈Hybrid技术的设计与实现 浅谈Hybrid技术的设计与实现第二弹 浅谈Hybrid技术的设计与实现第三弹——落地篇 随着移动浪潮的兴起,各种APP层出不穷,极速的业务扩展提升了团队对开发 ...
随机推荐
- [Machine-Learning] 一个线性回归的简单例子
这篇博客中做一个使用最小二乘法实现线性回归的简单例子. 代码来自<图解机器学习> 图3-2,使用MATLAB实现. 代码link 用到的matlab函数 由于以前对MATLAB也不是非常熟 ...
- struts2默认Action配置
在项目中,需要在输入错误的url的时候,弹出友好的错误提示页面 在struts2中可以通过配置默认的action达到这个目的 配置方法: <package name="default& ...
- bzoj2453
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2453 题目大意: (1) 若第一个字母为“M”,则紧接着有三个数字L.R.W.表 ...
- 职业定位(Web前端、后台、PC端)
Web前端 Web前端开发工程师:http://baike.sogou.com/v18499271.htm WEB前端开发面试题集锦:http://wenku.baidu.com/view/47bbc ...
- mvn常用指令记录
maven工程版本号更新: -------------------------------------------------------------------------------------- ...
- C# 常用工具合集
Visual Studio 2013 扩展 Visual Studio 2013 Update 4:是目前微软发布的最新版开发工具升级包,高效而且强大.下面的扩展都是该版本的Visual Studio ...
- 选项卡(TabHost)的功能与用法
TabHost是一种非常实用的组件,TabHost可以很方便地在窗口上放置多个便签页,每个标签页相当于获得了一个与外部容器相同大小的组件摆法区域.通过这种方式,就可以在一个容器里放置更多组件,例如手机 ...
- 开篇 Android系统的体系结构
1.APPLICATIONS (应用程序层) 2.APPLICATION FRAMEWORK(应用程序框架) android应用程序提供了大量应用程序供开发者使用,当我看开发android应用程序时 ...
- Spring @Aspect实现切面编程
参考:http://blog.csdn.net/cdl2008sky/article/details/6268628 参考:http://www.360doc.com/content/12/0602/ ...
- python属性查找(attribute lookup)
在Python中,属性查找(attribute lookup)是比较复杂的,特别是涉及到描述符descriptor的时候. 在上一文章末尾,给出了一段代码,就涉及到descriptor与att ...