浅谈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层出不穷,极速的业务扩展提升了团队对开发 ...
随机推荐
- Web前端开发中的各种CSS规范
Reference: http://yusi123.com/2866.html 一.文件规范 1.文件均归档至约定的目录中(具体要求以豆瓣的CSS规范为例进行讲解): 所有的CSS分为两大类:通用类和 ...
- Android studio的那些bug
R文件无法编译: 1.Activity继承类AppCompatActivity有时候会报错 2.R文件找不到一般是layout文件夹下出错 3.sdk包问题 4.Gradle DSL method n ...
- Struts2动态方法调用
动态方法就是一个Action对应多个请求,减少Action的数量 1.指定method属性 <action name="addAction" method="add ...
- Visual Studio Team Services 帐户管理操作
Visual Studio Team Services 网址: https://www.visualstudio.com/ 1.登陆 2.登陆后新建账户 3.删除团队项目 (1)点击自己的Visual ...
- Delphi中String类型原理介绍
Delphi中字符串的操作很简单,但幕后情况却相当复杂.Pascal传统的字符串操作方法与Windows不同,Windows吸取了C语言的字符串操作方法.32位Delphi中增加了长字符串类型,该类型 ...
- php中利用array_filter过滤数组为空值
[导读] 在我们开发过程中,判断数组为空时你会想到什么方法呢?首先想到的应该是empty函数,不过直接用empty函数判断为空是不对的,因为当这个值是多维数的时候,empty结果是有值的.其实我们可以 ...
- Activity的生命周期与加载模式——Activity的生命周期演示
当Activity处于Android应用中运行时,它的活动状态由Android以Activity栈的形式管理.当前活动的Activity位于栈顶.随着不同应用的运行,每个Activity都有可能从活动 ...
- Spring classPath:用法
http://blog.csdn.net/xing_sky/article/details/8228305 参考文章地址: http://hi.baidu.com/huahua035/item/ac8 ...
- Storm InvalidTopologyException: null
异常信息: backtype.storm.generated.InvalidTopologyException: null at backtype.storm.daemon.common$valida ...
- 迈向新纪元编辑器Atom
第一次听说Atom是半年前天猫的学姐说她在用这款这款编辑器,期间我从dw到st再到webstorm都分别做了项目~,但是作为一名拥抱开源的FE,怎么能拒绝github社区维护的项目呢?接着就让我们感受 ...