前言
上一篇文章我們介紹了什么是單元測(cè)試以及使用單元測(cè)試的意義次哈,接下來(lái)我們基于mocha和shoudjs搭建一個(gè)基本的單元測(cè)試的環(huán)境。
測(cè)試框架
Mocha是一款功能豐富的Java單元測(cè)試框架榆纽,它既可以運(yùn)行在Node.js環(huán)境中,也可以運(yùn)行在瀏覽器環(huán)境中剧劝,Mocha會(huì)串行地執(zhí)行我們編寫(xiě)的測(cè)試用例雁芙,可以在將未捕獲異常指向?qū)?yīng)用例的同時(shí),保證輸出靈活準(zhǔn)確的測(cè)試結(jié)果報(bào)告熬荆。
Mocha提供了兩個(gè)主要API: describe和it
describe(name,fn) :稱為"測(cè)試套件"(test suite)舟山,表示一組相關(guān)的測(cè)試。它是一個(gè)函數(shù)卤恳,第一個(gè)參數(shù)是測(cè)試套件的名稱("加法函數(shù)的測(cè)試")累盗,第二個(gè)參數(shù)是一個(gè)實(shí)際執(zhí)行的函數(shù)。
it(name,fn) :稱為"測(cè)試用例"(test case)突琳,表示一個(gè)單獨(dú)的測(cè)試若债,是測(cè)試的最小單位。它也是一個(gè)函數(shù)拆融,第一個(gè)參數(shù)是測(cè)試用例的名稱("1 加 1 應(yīng)該等于 2")蠢琳,第二個(gè)參數(shù)是一個(gè)實(shí)際執(zhí)行的函數(shù)。
斷言庫(kù)
所謂"斷言"镜豹,其實(shí)就是判斷源碼的實(shí)際執(zhí)行結(jié)果是否與預(yù)期結(jié)果一致傲须,如果不一致就會(huì)拋出錯(cuò)誤。斷言的意思就是逛艰,調(diào)用add(1,1),結(jié)果應(yīng)該等于2躏碳。
所有的測(cè)試用例(it塊)都應(yīng)該含有一句或多句的斷言。它是編寫(xiě)測(cè)試用例的關(guān)鍵散怖。斷言功能由斷言庫(kù)來(lái)實(shí)現(xiàn)菇绵,Mocha本身不帶斷言庫(kù),所以必須先引入斷言庫(kù)镇眷。此處我們使用的是斷言庫(kù)should.js咬最。
should.js : BDD風(fēng)格斷言庫(kù),should相對(duì)于node自帶的assert有比較豐富的api欠动,并且其語(yǔ)法非常的語(yǔ)義化永乌。
foo.should.equal();
bar.should.have();
foo.should.bot.be();
bar.should.deepEqual();
測(cè)試原理
我們按照Mocha的it函數(shù)編寫(xiě)一個(gè)個(gè)測(cè)試用例,然后Mocha負(fù)責(zé)執(zhí)行這些用例具伍,根據(jù)should提供的各種斷言函數(shù)翅雏,如果斷言成功,測(cè)試用例通過(guò)人芽,當(dāng)斷言失敗時(shí)望几,拋出錯(cuò)誤,Mocha會(huì)捕獲到這些異常萤厅,然后對(duì)應(yīng)的測(cè)試用例失敗橄抹。
1)安裝
npm i mocha -g
在寫(xiě)測(cè)試用例過(guò)程中靴迫,我們需要用到可以拋出一個(gè)錯(cuò)誤的斷言模塊:should.js,對(duì)should.js進(jìn)行安裝:
npm i should
2)測(cè)試腳本的寫(xiě)法
先定義一個(gè)簡(jiǎn)單的函數(shù)hello.js:
module.exports = function hello(){
return 'hello world';
}
在項(xiàng)目根目錄下創(chuàng)建一個(gè)與該文件同名楼誓,后綴名為hello.test.js的文件:
require('should');
var hello = require('./lib/hello');
describe('輸出字符串',function(){
it('輸出hello world',function(){
hello().should.equal('hello world')
});
})
上面這段代碼玉锌,就是測(cè)試腳本,它可以獨(dú)立執(zhí)行疟羹。測(cè)試腳本里面應(yīng)該包括一個(gè)或多個(gè)describe塊主守,每個(gè)describe塊應(yīng)該包括一個(gè)或多個(gè)it塊。
在根目錄的終端下執(zhí)行命令:mocha hello.test.js,測(cè)試當(dāng)前測(cè)試用例阁猜。
測(cè)試用例通過(guò)丸逸!
- 注意事項(xiàng):
- Mocha默認(rèn)運(yùn)行test子目錄中的測(cè)試腳本,所以一般將測(cè)試腳本放在test目錄里剃袍,然后執(zhí)行mocha 就不需要參數(shù)了。
- 運(yùn)行mocha命令捎谨,mocha默認(rèn)只執(zhí)行test子目錄的腳本民效,但是test子目錄中還有一個(gè)test/dir子目錄,里面還有一個(gè)執(zhí)行腳本abs.test.js ,并沒(méi)有執(zhí)行涛救。為了改變這種行為畏邢,就必須在mocha后面加上--recursive參數(shù),這時(shí)检吆,才會(huì)執(zhí)行test子目錄下的所有測(cè)試用例舒萎。
具體代碼:
https://github.com/gy0318/simpleTest
參考文檔:
https://segmentfault.com/a/1190000011362879
http://shouldjs.github.io/
http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html