国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

NodeJS測(cè)試框架mocha入門教程

2024-05-06 15:19:16
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

NodeJS里最常用的測(cè)試框架估計(jì)就是mocha了。它支持多種node的assert libs, 同時(shí)支持異步和同步的測(cè)試,同時(shí)支持多種方式導(dǎo)出結(jié)果,也支持直接在browser上跑Javascript代碼測(cè)試。

本文示例大多源于官網(wǎng)示例,部分示例結(jié)合需要或自己的感想有所改動(dòng)。更多介紹請(qǐng)看 官方網(wǎng)址:Mocha on Github

Installation:

當(dāng)你成功安裝nodejs v0.10 和 npm后執(zhí)行下面這條命令。

# npm install -g mocha

p.s. Ubuntu的注意apt源里的nodejs版本會(huì)比較舊,某些module會(huì)不支持,請(qǐng)從nodejs官網(wǎng)進(jìn)行源碼安裝。

First step to Mocha:

以下為最簡(jiǎn)單的一個(gè)mocha示例:

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)); }) })});

describe (moduleName, testDetails) 由上述代碼可看出,describe是可以嵌套的,比如上述代碼嵌套的兩個(gè)describe就可以理解成測(cè)試人員希望測(cè)試Array模塊下的#indexOf() 子模塊。module_name 是可以隨便取的,關(guān)鍵是要讓人讀明白就好。
it (info, function) 具體的測(cè)試語(yǔ)句會(huì)放在it的回調(diào)函數(shù)里,一般來(lái)說(shuō)info字符串會(huì)寫期望的正確輸出的簡(jiǎn)要一句話文字說(shuō)明。當(dāng)該it block內(nèi)的test failed的時(shí)候控制臺(tái)就會(huì)把詳細(xì)信息打印出來(lái)。一般是從最外層的describe的module_name開(kāi)始輸出(可以理解成沿著路徑或者遞歸鏈或者回調(diào)鏈),最后輸出info,表示該期望的info內(nèi)容沒(méi)有被滿足。一個(gè)it對(duì)應(yīng)一個(gè)實(shí)際的test case
assert.equal (exp1, exp2) 斷言判斷exp1結(jié)果是否等于exp2, 這里采取的等于判斷是== 而并非 === 。即 assert.equal(1, ‘1') 認(rèn)為是True。這只是nodejs里的assert.js的一種斷言形式,下文會(huì)提到同樣比較常用的should.js。
如果exp1和exp2均為字符串,字符串比較出錯(cuò)時(shí)則控制臺(tái)會(huì)用顏色把相異的部分標(biāo)出來(lái)。

Asynchronous

Frist step 中的代碼顯然是個(gè) Synchronous 的代碼,那么對(duì)于異步代碼應(yīng)該怎么做呢?很簡(jiǎn)單,在你最深處的回調(diào)函數(shù)中加done()表示結(jié)束。

fs = require('fs');describe('File', function(){ describe('#readFile()', function(){   it('should read test.ls without error', function(done){   fs.readFile('test.ls', function(err){  if (err) throw err;  done();  }); }) })})

done ()<br> 按照瀑布流編程習(xí)慣,取名done是表示你回調(diào)的最深處,也就是結(jié)束寫嵌套回調(diào)函數(shù)。但對(duì)于回調(diào)鏈來(lái)說(shuō)done實(shí)際上意味著告訴mocha從此處開(kāi)始測(cè)試,一層層回調(diào)回去。

上例代碼是test pass的,我們嘗試把test.ls改成不存在的test.as。便會(huì)返回具體的錯(cuò)誤位置。

這里可能會(huì)有個(gè)疑問(wèn),假如我有兩個(gè)異步函數(shù)(兩條分叉的回調(diào)鏈),那我應(yīng)該在哪里加done()呢?實(shí)際上這個(gè)時(shí)候就不應(yīng)該在一個(gè)it里面存在兩個(gè)要測(cè)試的函數(shù),事實(shí)上一個(gè)it里面只能調(diào)用一次done,當(dāng)你調(diào)用多次done的話mocha會(huì)拋出錯(cuò)誤。所以應(yīng)該類似這樣:

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 皋兰县| 唐山市| 鄂尔多斯市| 石柱| 堆龙德庆县| 九江县| 白银市| 五家渠市| 拜城县| 临朐县| 红原县| 大兴区| 铜梁县| 南部县| 天门市| 水富县| 邻水| 汝州市| 嘉兴市| 汶上县| 昭觉县| 通州区| 尚志市| 奉贤区| 常宁市| 连平县| 安泽县| 奉新县| 申扎县| 昌黎县| 连山| 抚宁县| 绵竹市| 麟游县| 古丈县| 北安市| 福安市| 文成县| 万源市| 成安县| 茶陵县|