javaScript测试框架jasmine介绍(一)

上一篇 / 下一篇  2012-08-13 09:49:40 / 个人分类:Java

51Testing软件测试网 `%Q2r'S)z+F

  目前网上关于前端js测试框架jasmine功能介绍的文章少之又少,由于笔者最近接触js的测试,将选用jasmine作为测试框架,这里简单介绍一下jasmine在测试中的使用,后续还将对测试中遇到的问题和框架的使用经验进行分享。文章内容主要来源于对官网的翻译和其他一些零散的文档,以及笔者对该框架的一些理解,如有描述不清或理解偏差,欢迎拍砖

ssX(hvb051Testing软件测试网p vW3Iv$Dm.C5]

  Jasmine是一种js测试框架,它不依赖于其它任何的js框架,不需要DOM,且清爽、明确的语法使得使用者很容易地进行白盒测试

^2dclB%M;Tw051Testing软件测试网w.Q~#N^r/}

  先来大致了解jasmine用例的语法结构:51Testing软件测试网@T A%Fq

51Testing软件测试网m"Be"S0ZL'Q

   测试suite开始于全局方法describe,这个方法含两个参数:一个String,一个function,String用来描述一个spec suite(笔者将spec理解为测试主体,而suite就是spec的集合),而function的内容就是suites

9y/q1[V*Ija0WW0

Tg1c(~oK0  spces用jasmine的全局方法it来定义,it和describe一样,包含两个参数(一个String,一个function),String用来描述spec,而function的内容就是测试主体。一个spec可以包含一个或多个expections。

3M o`X0Ap.?0

~ g k@6i'Q&x0  一个expectation在jasmine中就是一个断言,返回true或false。只有当一个spec中的expections全为ture时,这个spec显示通过,否则失败51Testing软件测试网 Z"iO b:L2m~

P/tSQ}a \9V P0  最基本的jasmine用例结构如下图:

2HEh[&x0

Z0kU+Jb&D)Y1i!D0

  因为describe和it是function,所以可以包含可执行的代码。由于javaScript的语法规则,定义在describe中的变量在it里是有效的,如下图51Testing软件测试网(byC wN)C Q x |

b_)]%S"c?0

  Ecpections由方法expect构建,带有实际值,它和Matcher方法链接在一起,Matcher方法带期望值。

P"P ^Y _-bd0

  每个matcher在真实值和期望值之间进行比较,返回boolean。jasmine通过exception的返回来判定spec是通过还是失败

)Y ~;Ks6?%bO U0

  任何matcher都能通过在expect调用matcher前加上not来判断一个否定的断言,如下图

-gt/S;nBAS6p0

*m3G} H1^0

  Jasmine含有一个丰富的matcher集,也可以自己定义matcher来实现一个特殊的断言,下面简单介绍一下各种matcher的使用,对于简单易理解的读者可以通过下面截图中it的一个参数字符串的意思来理解,复杂的笔者会做出相应的说明51Testing软件测试网] VD*utSH Z

  下图的两个matcher都为判等,toBe()与toEqual的区别相当于js中==和===的区别,前者判断值,后者判断值和类型

[@*w3aID0

kW4`g]K#T g0

3TY"V"?b!e8e H,[0  下图为匹配方法,红色为不能匹配

@+j ?+if^A&c0

jf_V"Hk/O4P\0

  下面的matcher都易懂,不解释,所有的expect返回的都为true,记住这点对理解matcher用法很有帮助

1Z/ax|V,@%y$K0

7Ta]/Ab!{B5ZU0

+W:p{v @&A Q C!^0

  toBeCloseTo相对难理解,这里做一下解释:

,b V U vfmn0

  先来看toBeCloseTo的源码,如下图,先对传入的精度参数判零后做了一次逻辑或运算,并将返回值赋给精度参 数,之后代码很好理解,是根据精度参数调整四舍五入的范围,最初让笔者纠结的是这个方法为什么要用精度参数和2做逻辑或,这么一来不是无论传什么非零参 数,精度参数在逻辑或之后都成了1?后来发现是这么回事,注意:js逻辑或的值就是true或者false类型的原来是个大的错误,逻辑或会取||两边的 一个不为0或false的值,从左往右51Testing软件测试网q&u%h r5n@8E-W

R m2e ic$D!u-T ~ f0

  分析完源码就不难理解toBeCloseTo的作用,就是将expected和actual的小数点后precision+1位四舍五入,然后判断是否相等,相等返回true,否则返回false,见下图51Testing软件测试网 J`-ER U|*E?/n!Y3]v

W9R;~|l9},v'`$R0

  toThrow()不解释,见下图51Testing软件测试网$D ]%f9H_e ?9_;\0s

51Testing软件测试网X.G e)R`#J

;C5Y)V#v Pq(S0  为了避免重复的setup和teardown,jasmine提供了全局的方法 beforeEach和afterEach,beforeEach在每个spec(it)前执行一次,afterEach在每个spec(it)后执行一 次,官网的例子写得不是很好,笔者做了一下修改,见下图51Testing软件测试网7bUYnq

FyZkIq*D9j0

  describe是可以嵌套的,并且specs可以定义在任何一层的describe中,jasmine允许用树状 的方法来组成一个suite.在一个spec执行之前,jasmine从树的根节点依次执行各个beforeEach,afterEach同理,只是在 spec执行之后执行,见下图51Testing软件测试网}9c+jy'Q

51Testing软件测试网{ T ]b&y| S

  suites和specs是可以设为无效的,只需要将describe和it写成xdescribe和xit,这样在运行时它们是被忽略的,它们的结果不会出现在总的结果里51Testing软件测试网w-d)M%ma"p"E

51Testing软件测试网n~K.Z(O0Kp

  上述的这些特性已基本可以满足一般场景测试的需求,读者可以自行尝试,在本系列的第二讲中将介绍jasmine的一些不常用的特性,以满足一些特殊的测试场景。51Testing软件测试网8[q;gqL&F g


TAG:

 

评分:0

我来说两句

Open Toolbar