单元测试Qunit
来源:互联网 发布:gopro windows 编辑:程序博客网 时间:2024/06/01 21:48
QUnit
QUnit是一个强大的JavaScript单元测试框架,该框架是由jQuery团队的成员所开发。据说一开始是jQuery的一部分,后来独立于jQuery,是jQuery的官方测试套件。官方说法,QUnit是个强大简单易用的JavaScript测试框架。由于QUnit 脱胎于 jQuery,因此应用非常广泛。
优点:
1.因为自带JS和CSS,因此它有最漂亮最详细的测试界面。
2.另外它的API和配置非常简单,很容易上手。
3.QUnit 脱胎于jQuery, 不依赖任何软件和库。因此JS能运行的地方都可以使用它。与jQuery 集成更方便。
4.当然也有缺点,就是QUnit 主要用于浏览器中进行测试,自动化不是很好。不过随着它的流行,相信不是问题。
安装
QUnit 的安装很容易,下面三种方式都可以。官网下载: http://qunitjs.com/ 最新版本是 v2.4.0。
直接引用
<link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.4.0.css"> <script src="https://code.jquery.com/qunit/qunit-2.4.0.js"></script>npm安装
npm install --save-dev qunitjs另外官网上也给出了YARN 和 bower 的安装。
YARN: yarn add qunitjs --devBower bower install --save-dev qunit方便起见,建议 全局安装
npm install -g qunitjs这样我们就可以在命令行即可执行测试:
qunit 'tests/*.js'
使用
例子
先看一个简单的例子:
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>QUnit Example</title> <link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.4.0.css"> </head> <body> <div id="qunit"></div> <div id="qunit-fixture"></div> <script src="https://code.jquery.com/qunit/qunit-2.4.0.js"></script> <script type="text/javascript"> QUnit.test( "hello test", function( assert ) { assert.ok( 1 == "1", "Passed!" ); }); QUnit.module( "module a", function() { QUnit.test( "a basic test example", function( assert ) { assert.ok( true, "this test is fine" ); }); }); QUnit.todo( "fireLazer returns the correct value", function( assert ) { var result = this.robot.fireLazer(); // Currently returns undefined assert.equal( result, "I'm firing my lazer!" ); // assert.ok( true, "this test is fine" ); }); QUnit.test( "two async calls", function( assert ) { assert.expect( 2 ); var done1 = assert.async(); setTimeout(function() { assert.ok( true, "test resumed from async operation 2" ); done1(); }, 150); }); QUnit.test( "ok test", function( assert ) { assert.ok( true, "true succeeds" ); assert.ok( "non-empty", "non-empty string succeeds" ); assert.ok( false, "false fails" ); assert.ok( 0, "0 fails" ); assert.ok( NaN, "NaN fails" ); assert.ok( "", "empty string fails" ); assert.ok( null, "null fails" ); assert.ok( undefined, "undefined fails" ); }); QUnit.test( "step test", function( assert ) { assert.expect( 1 ); var obj = {}; obj.hook = function() { assert.step('Hook is called!'); }; obj.invokeHookIndirectly(); }); </script> </body></html>用浏览器打开如下:
例子中我们使用:
QUnit.test(name, testFunction)第一个参数name是用来标记test名称的字符串。第二个参数,testFunction是一个函数,包含了一个asset作为它的参数。asset包含了许多可供我们断言的方法。
div
要注意的是,这里一定要在 <body> 元素里添加 下面的 <div>元素。
<div id="qunit-fixture"></div>用于展示自动化执行结果。
API
QUnit 的API有五部分:Main methods, Assertions, Config, Callbacks, Async control。相比于Mocha、Jasmine 来说,可以说算少。
首先 QUnit 使用 module 和 test 方法组织测试集和测试用例。
QUnit.module( name [, hooks] [, nested ] )// hooks properties: { before, beforeEach, afterEach, after }// Nested module: nested( hooks )QUnit.test( name, callback )由于QUnit 是支持 TDD 的,因此少不了以下方法。
QUnit.only( name, callback ) // 本次只运行改测试用例,忽略其他。QUnit.skip( name )// 本测试用例可能还不 pass,跳过执行。QUnit.todo( name, callback ) // 该测试用例尚未完成,之后会加上。另外,还有支持异步测试的 QUnit.stop() 和 QUnit.start()。
Assertions
首先是八个与 equal 有关的断言。
equal( actual, expected [, message ] ) //真实值和期待值(expected )是否相等,通过非严格方式的 "==",可能会转换类型。notEqual( actual, expected [, message ] )strictEqual( actual, expected [, message ] )// 真实值和期待值(expected )是否相全等(===)。notStrictEqual( actual, expected [, message ] )deepEqual( actual, expected [, message ] )// 递归性严格比较的,针对所有的javascript类型。如果真实值和期待值(expected)属性,属性值都一样并且和有同样的prototype的话,断言通过。notDeepEqual( actual, expected [, message ] )propEqual( actual, expected [, message ] )//比较真实和期待(expected )的对象的属性和属性值是否相同,相同断言通过。(注意和deepEqual的区别。)notPropEqual( actual, expected [, message ] )//在异步测试中告诉Qunit 测试完成。var done2 = assert.async()expect( amount ) // 预测我们的 assert 的执行次数,如果测试用例执行完发现不一致,则测试失败。ok( state [, message ] )notOk( state [, message ] )throws( blockFn, expected [, message ] )//判断函数是否抛出一个异常,第二个参数可选,代表不一定要检测抛出异常的类型timeout( duration ) // 单位 millisecondsstep( [ message ] )verifySteps( steps [, message ] )
调试工具
用浏览器打开后,页面的顶部会出现三个可用的小工具。很有用。
即隐藏通过的测试,很显然,开发时我们更关注失败的测试用例。
Check for Globals
如果勾选这个,在运行测试之前,QUnit会枚举window所有属性,然后与运行结束之后的window做比较,如果前后不一样,就会failed 掉。是不是很神奇?这样我们再也不会担心由于我们的失误污染全局变量了。
例如,我们在下面的代码中声明变量 zz 不用 var ,则会产生全局变量。
QUnit.test( "step test", function( assert ) { // 省略代码 var zw = {}; zz = {}; assert.ok( true, "test resumed" ); });当勾上时,会显示这个测试用例失败。
No try-catch
我们知道JavaScript不擅长异常处理。QUnit使用try-catch 捕获异常,然后抛出的异常。此时原来的异常堆栈就丢失了。这就给错误定位带来不方便。而选中时,QUnit 就会在try-catch 之外执行回调,这时如果出现异常就停止。
- 单元测试Qunit
- JavaScript单元测试之Qunit
- QUnit前端单元测试
- 使用QUnit进行Javascript单元测试
- javascript--QUnit【javascript单元测试框架】
- 使用Qunit做javascript单元测试
- Javascript单元测试框架比较Qunit VS Jasmine
- Javascript单元测试框架比较Qunit VS Jasmine
- Javascript单元测试框架比较Qunit VS Jasmine
- Javascript单元测试框架比较Qunit VS Jasmine
- 边译边学-QUnit下的JavaScript自动化单元测试
- 使用QUnit对JS进行单元测试
- 使用QUnit对JS进行单元测试
- 如何使用 QUnit 进行 JavaScript 单元测试
- 前端单元测试插件qunit.js使用示例
- 边译边学-QUnit下的JavaScript自动化单元测试
- JQuery团队打造的javascript单元测试工具QUnit介绍javascript
- 测试函数JavaScript单元测试工具使用—QUnit
- 基于决策树的分类回归(随机森林,xgboost, gbdt)
- NYOJ176 整数划分(二)(DP,DFS)
- 集合各实现类的底层实现原理
- jfinal下部署maven项目遇到的问题及解决方法
- 树中第一个公共祖先结点----解法
- 单元测试Qunit
- WIN7系统下U盘安装Ubuntu双系统
- Android用VideoView实现MP4作为页面背景(仿QQ登录页面效果)
- 关于Linearlayout里weight与子布局的wrap content
- php模拟长连接
- VS2010的编码经验
- tomcat大量time wait问题
- Spring Data JPA入门
- #bzoj1846