Javascript 使用Qunit單元測試

QUnit環境配置

首先下載QUnit的開發包,解壓後咱們只須要qunit目錄下的qunit.css和qunit.js文件便可。而後建立一個HTML文件將這兩個文件引用進來便可,HTML代碼以下:css

  <!DOCTYPE html>
<html>
<head>
	<title></title>
<link href="qunit-1.12.0.css" rel="stylesheet" />
<script src="../js/json2.js"></script>
<script src="../js/jquery-2.0.2.min.js"></script>
<script src="qunit-1.12.0.js"></script>

</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
</body>
</html>

  

建議另外建兩個和qunit同級的目錄,src和test,分別用來放源代碼和測試代碼。而後把這些全部的代碼都引入到上面的HTML文件中去。全部這些準備好後就能夠享受QUnit單元測試的樂趣了。html

QUnit使用方法

QUnit的用法比較簡單,API不是不少,全部的API也就16個左右。全部的API能夠分爲三類:Setup,Assertions,Asynchronous Testing,下面就分別對這些API作些介紹,約定:凡是用[]包起來的參數表示可選參數。jquery

Setup:

  • test( name, [expected], test ),表明QUnit中的一個測試,就是沒添加一個測試就調用一次test(),name參數是要測試的名稱,好比」加法函數」或」add」等,expected參數是可選參數,用來表示該測試函數的斷言的數量,是個正整數,test參數是一個函數對象,全部的測試代碼都應該包括在該函數裏,一般這是一個匿名函數。例如:test(「add function」, 1, function() {equal(add(1, 2), 3);});
  • asyncTest( name, [expected], test ),表明QUnit中的一個異步測試,這個會在異步測試中,參數同上一個test( name, expected, test )
  • expect( amount ),用在測試函數中,用於聲明測試斷言的數量,這個函數和test( name, expected, test )的expected參數的做用是同樣的,兩個用一個便可,固然都不用也沒有關係。主要做用就是檢查你聲明的個數和你寫的斷言的實際個數是否一致。
  • module( name, [lifecycle] ),這個函數主要用於測試函數的分組,你能夠理解一個module函數是一個模塊的意思,好比module(「validate」)表示後面的測試用例都是alidate相關的代碼,或者module(「common.js」),代表後面的測試用例都是common.js裏面的代碼,如何劃分看我的理解啦,一個測試文件是能夠寫多個module的。name參數是分組或者模塊的名稱,lifecycle是可選參數,它是一個對象類型,能夠設置setup和teardown回調函數,例如module(「common.js」, {setup:function(){},teardown: function() {} }),setup回調函數將會在module開始以前執行,好比能夠爲該module下面的測試代碼作一些準備工做,teardown回調函數將會在該module的全部測試代碼執行後執行,好比作一些清理還原工做等。
  • QUnit.init( ),用於初始化QUnit測試框架,一般這個函數是不須要咱們手工調用的。
  • QUnit.reset( ),重設函數,一般是在每一個test函數執行後由QUnit本身調用來重設整個QUnit測試環境,固然必要時咱們本身也能夠調用它來複原,不過目前我尚未調用過它。

Assertions:

全部斷言函數的message都是可選參數,能夠是一段話來描述整個斷言,這樣在測試結果頁面能夠很清楚看出這個斷言是幹什麼的,好比equal(add(1, 2), 3, 「1加2應該等於3″)git

  • ok( state, [message] ),bool斷言,參數state的值爲true時表示經過,不然失敗。
  • equal( actual, expected, [message] ),比較參數actual和expected是否相等,轉化爲JavaScript代碼爲if (actual == expected),是不比較類型的。
  • notEqual( actual, expected, [message] ),比較兩個參數不相等,轉化爲JavaScript代碼爲if (actual != expected),是不比較類型的,不相等則經過,不然失敗。
  • deepEqual( actual, expected, [message] ),主要用於數組和對象等類型的值是否相等,會遞歸遍歷它們所包含的值是否相等。
  • notDeepEqual( actual, expected, [message] ),主要用於數組和對象等類型的值是否不相等,會遞歸遍歷它們所包含的值是否不相等。
  • strictEqual( actual, expected, [message] ),比較參數actual和expected的值和類型是否相等,轉化爲JavaScript代碼爲if (actual === expected),是須要比較1類型的。
  • notStrictEqual( actual, expected, [message] ),比較參數actual和expected的值和類型是否不相等,轉化爲JavaScript代碼爲if (actual !== expected),是須要比較類型的。
  • raises( block, expected, [message] ),測試block函數是否拋出一個異常,拋出則經過,不拋則失敗。block參數是咱們要測試的函數,expected參數是一個函數,是一個可選參數,用來驗證第一個函數拋出的異常是不是咱們想要的。

Asynchronous Testing:

  • stop( [increment] ),中止測試的運行,由於在異步環境中,不中止的話就運行結束了,異步的回調都不會被處理,因此在異步測試時通常先把QUnit的test runner停下來。increment參數是增長中止的時間。
  • start( [decrement] ),當異步調用成功後就應該把中止的test runner啓動起來讓它接着往前跑了,decrement參數用來減小中止的時間。

異步測試的代碼須要寫在asyncTest( name, [expected], test )中,一個Ajax異步測試的例子:github

asyncTest("loginFromMobile interface", function () {
        //ajax test
        var requestUrl = "http://test.com";
        var paramCollection = {
            staffId: "99994",
            password: "123"
        };

        $.ajax({
            url: requestUrl,
            type: "post",
            data: paramCollection,

            success: function (response) {

                ok(!result.error);

                start();
            },
            error: function (data, status, e) {}
        });
});

  

 

與瀏覽器自動化測試工具集成的接口

QUnit額外提供了一些與瀏覽器自動化測試工具集成的接口,這些接口實現後會被QUnit自動調用,注意,這些接口是留着咱們開發人員本身來實現的。這裏簡單作些介紹:ajax

  • QUnit.log({ result, actual, expected, message }),這個接口會在每一個斷言執行後調用,result值是斷言是否經過,message是斷言裏的message參數。
  • QUnit.testStart({ name }),在每一個測試函數執行前調用,name參數是測試函數中的name參數值,這裏的測試函數是指test()或者asyncTest()。
  • QUnit.testDone({ name, failed, passed, total }),在每一個測試函數結束後執行,name參數同上,failed參數是指失敗斷言的個數,passed參數是指成功斷言的個數,total是指全部斷言的個數。
  • QUnit.moduleStart({ name }),在每一個module後面全部的測試代碼執行前調用,name參數是module(name)中name的值。
  • QUnit.moduleDone({ name, failed, passed, total }),在module下面全部的測試代碼執行完以後執行,failed參數是指失敗斷言的個數,passed參數是指成功斷言的個數,total是指全部斷言的個數。
  • QUnit.begin(),在全部的測試代碼調用以前運行。
  • QUnit.done({ failed, passed, total, runtime }),在全部的測試代碼調用以後運行,failed參數是指失敗斷言的個數,passed參數是指成功斷言的個數,total是指全部斷言的個數,runtime代碼全部代碼的執行時間。
相關文章
相關標籤/搜索