Mocha是運(yùn)行在nodejs和瀏覽器下的JavaScript的單元測(cè)試框架,官方文檔在https://mochajs.org/,相當(dāng)?shù)娜菀咨鲜趾秃糜?,單元測(cè)試框架其實(shí)都差不多,基本都包含下面內(nèi)容:
用于寫測(cè)試用例的宏,屬性或者函數(shù)
斷定庫(kù), 用于測(cè)試是否可以通過(guò)
輔助庫(kù),如hook庫(kù)(測(cè)試前后調(diào)用某些函數(shù)或者方法),異常檢查(某些函數(shù)在某些參數(shù)的情況下拋出異常), 輸入組合(支持多排列的參數(shù)輸入組合)等。
支持IDE的集成
下面就按照官方文檔的順序來(lái)簡(jiǎn)明扼要的
安裝與初步的使用
在控制臺(tái)窗口中執(zhí)行下列命令:
$ npm install -g mocha$ mkdir test$ $EDITOR test/test.js
可以寫如下代碼:
var assert = require('assert');describe('Array', function() { describe('#indexOf()', function () { it('should return -1 when the value is not present', function () { assert.equal(-1, [1,2,3].indexOf(5)); assert.equal(-1, [1,2,3].indexOf(0)); }); });});回到控制臺(tái):
$ mocha . ✔ 1 test complete (1ms)
這里mocha會(huì)查找當(dāng)前文件目錄下test文件夾下的內(nèi)容,自動(dòng)執(zhí)行。
斷定庫(kù)
這個(gè)是判定測(cè)試用例是否通過(guò),默認(rèn)下可以用nodejs的assert庫(kù),與此同時(shí),Mocha支持我們使用不同的斷定庫(kù),現(xiàn)在可以支持下面的斷定庫(kù),每個(gè)斷定庫(kù)的用法有一些差異,自己可以參考相應(yīng)的文檔。
1 should.js(https://github.com/shouldjs/should.js) BDD style shown throughout these docs (BDD模式,本文檔用的都是這個(gè)斷定庫(kù))
2 better-assert(https://github.com/tj/better-assert) c-style self-documenting assert()(C-模型下的斷定庫(kù))
3 expect.js (https://github.com/Automattic/expect.js)expect() style assertions (expect模式的斷定庫(kù))
4 unexpected(http://unexpected.js.org/) the extensible BDD assertion toolkit
5 chai(https://github.com/chaijs) expect(), assert() and should style assertions
同步代碼
同步代碼表示測(cè)試的是同步函數(shù),上面的Array相關(guān)的例子代碼就是。這個(gè)比較好理解。
異步代碼
只所以有異步代碼測(cè)試,原因是在nodejs上許多異步函數(shù),如下面的代碼中,只有done()函數(shù)執(zhí)行完畢后,該測(cè)試用例才算完成
describe('User', function() { describe('#save()', function() { it('should save without error', function(done) { var user = new User('Luna'); user.saveAsync(function(err) { if (err) throw err; done(); // 只有執(zhí)行完此函數(shù)后,該測(cè)試用例算是完成。 }); }); });});詳解describe和it
上面的實(shí)例代碼比較簡(jiǎn)單,那么什么是describe和it呢? 大致上,我們可以看出describe應(yīng)該是聲明了一個(gè)TestSuit(測(cè)試集合) ,而且測(cè)試集合可以嵌套管理,而it聲明定義了一個(gè)具體的測(cè)試用例。 以bdd interface為例,具體的源代碼如下:
新聞熱點(diǎn)
疑難解答
圖片精選