浅谈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层出不穷,极速的业务扩展提升了团队对开发 ...
随机推荐
- Python3基础 lambda表达式 简单示例
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- UVa 10341 - Solve It
题目:给一个方程,求解方程的解.已给出解的范围,并且可知方程等号左侧的函数是递减的,可用二分法进行试探,直到得出给定误差范围内的解. #include <cstdio> #include ...
- Spring Security——核心类简介——获得登录用户的相关信息
核心类简介 目录 1.1 Authentication 1.2 SecurityContextHolder 1.3 AuthenticationManager和Authenti ...
- centos command中 * . 的重要性
錯誤 cp /home/test1/* /home/test2/ –a 用參數*將不可以複製linux中.開頭的隱藏文件 正確 cp /home/test1/. home ...
- PHP简单分页类
<?php /* * ********************************************* * @类名: page * @参数: $myde_total - 总记录数 * ...
- redhat5安装phantomjs
Linux 64-bit Download phantomjs-2.1.1-linux-x86_64.tar.bz2 (22.3 MB) and extract the content. Note: ...
- JavaScript特效制作经典精讲(案例入门详解、可直接粘贴拷贝运行、史上最牛案例)
技巧一.添加链接提示 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...
- oracle语句总结(一)
1,建外键 新建两个表来实现外键的关联. create table main_tab ( id number, name varchar2(30) ); create table sub_tab ( ...
- BNU Online Judge-34973-Liserious战队
题目链接 http://www.bnuoj.com/bnuoj/problem_show.php?pid=34973 题目不难,很容易,不过不仔细看题可能你一直做不出,注意<<一共分为1~ ...
- java中Integer比较需要注意的问题
java中Integer比较需要注意的问题 package com.srie.test; import java.util.HashMap; import java.util.Map; public ...