QUnit前端单元测试

本文介绍了QUnit单元测试框架的基本断言方法,包括ok、equal和deepEqual的使用技巧,以及如何利用expect进行同步回调测试,和asyncTest进行异步回调测试。此外,还讲解了如何通过module进行测试分组,提高测试效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

断言

断言是单元测试必不可少的部分,单元测试实质就是验证实际运行结果是否与期待的结果一致。QUnit提供三个断言。

ok(truthy[, message])

ok()是最基本的断言,只有一个参数是必须的,如果这个参数是真值(true或能转换成true),断言就会通过,否则就会失败,还可提供一个测试结果字符串,例如测试:

img未正常显示

这个测试中的6个断言都会失败;每个断言判断一个假值(false或能转换成false)是否为true,当然会失败,对每个假值做逆运算可以使断言通过。

equal(actual, expected[ , message])

equal()断言用等号(==)判断actual和expected参数是否相等,如果相等,断言通过,否则断言失败,失败时实际值和期望值以及测试结果信息都会出现在测试结果中;

img未正常显示 

前面两个断言会失败,后面两个断言会成功。由于equal()断言在失败时,会显示实际值和期望值,因此,与ok()断言相比,equal()断言更方便调试。

deepEqual(actual, expected [, message])

deepEqual()断言的用法和equal()断言相同,但是使用deepEqual()断言是更好的选择,因为deepEqual()用的是全等操作符(===),而不是使用等号(==)进行相等性判断,拥有全等操作符带来的好处。deepEqual还会进行深比较,向内迭代比较属性直至该属性不再是对象类型为止。

img未正常显示

equal()主要应用在两个值的不严格的比较上。因此通常情况下,使用的是deepEqual()。

同步回调

QUnit提供了一种特殊的断言来声明一个测试中有多个断言。当测试执行完成了,只要断言的数目不正确,测试就会失败,而不管断言的结果如何。

要实现这个目的只要在test的开始调用expect()就好,参数是期望执行的断言数目。

img未正常显示

还有一种使用方式就是把期望执行的参数做为test()方法的第二个参数。

img未正常显示

异步回调

在同步回调中expect()很有效,但是在异步回调中就显得无能为力。异步回调与测试工具(这里指的是QUnit)排列和执行测试的方式有冲突。当一个测试中的代码使用的setTimeout()或者setInterval()或者使用ajax发送一个请求时,测试工具会继续执行该测试的剩余部分,连同该测试后的其他测试,而不是等待异步操作的结果。

针对异步测试回调,QUnit提供了asyncTest()方法来代替test()方法,并且在测试完成和准备继续时调用start()方法。

img未正常显示

同样也可以把期望执行的参数做为asyncTest()方法的第二个参数。

img未正常显示

测试分组

保证测试具有原子性并且不受干扰,但有时又需要进行逻辑组织并且运行特定的逻辑块中的测试。

使用module()方法可以对代码进行逻辑组织。module()方法之后的测试都属于这个模块下,在测试结果中,这些测试的测试名前面会增加模块名,可以通过模块名来选择这个模块下的测试运行。

 78oa

module()除了进行模块划分的作用还可以为模块中的测试添加通用的处理,module()方法的第2个参数用来定义这个模块中每个测试运行前后的执行函数.

78oa 

高效的开发

如果测试需要花费很长的时间运行,就需要避免花费大量的时间在等测试运行上。

QUnit提供功能来达到这个目标。有些甚至仅仅需要点击一下激活就好。选中顶部的“Hide passed tests”选择框,QUnit只会显示失败了的测试,这个虽然不会对执行速度产生影响,但是可以非常方便的看到失败了的测试。

QUnit还提供一个非常有意义的功能,这个功能默认是开启的并且很明显。就当测试失败时,QUnit会把测试的名字存储在sessionStorge中,下次再运行时,这些失败了的测试会优先执行,但是不会对输出结果的顺序产生影响,仅仅是执行顺序改变而已。通过和“Hide passed tests”选择框结合使用,只要测试还失败,就可以立马看到。

前面提到的自动重排序默认是开启的,但是它会影响到需要保证原子性的测试。如果测试没有保证原子性,将会看到随机的不确定的错误。正确的做法就是进行修正,设置QUnit.config.reorder = false

除了自动重排序,还有一些手工配置的选项可用。通过点击测试后面的“return”链接可以重新运行任何一个测试。这会在请求字符串上添加"testNumber=N"参数,这里N是被点击的测试的编号。点击之后会重新加载页面并且只运行点击的测试,可以用浏览器的后退按钮返回运行所有的测试。

同样,通过右上角的下拉框来选择模块下的测试运行也是一个很好的方式。这会在请求字符串上添加"module=N"参数,这里N是编号后的模块名例如:"?module=testEnvironment%20with%20object"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值