nodejs的單元測試框架mocha
當我們編寫比較復雜的項目時,需要對項目的測試用例進行長期跟蹤,對單元模塊進行質量控制,對開發成果進行自我檢驗,那麽需要一個好用的工具,自學了一下mocha,這個筆記幾乎是照搬官網的英文版進行了自我的一番理解的初步呈現,多以條目為主,還沒有時間進一步實踐,通過強制寫筆記的方式,鞭策自己加深理解,學會分享,提高學習力,我在努力。
1.安裝
npm install --global mocha
2.作為項目開發依賴項安裝
npm install --save-dev mocha
3.版本註意事項
Mocha v3.0.0 需要npm v2.14.2+
v3.0.0之後,不再依賴字符串匹配來決定執行哪些測試。
4.編碼
可以支持before, after, beforeEach, afterEach
5.test目錄
mocha會運行test目錄下所有測試,目錄名不能修改。
如果要包含子目錄用--recursive
6.生成package.json依賴mocha
使用npm init命令生成package.json
7.每個測試一段
it("name", function(){…})
8.測試原則
一次只測一種情況,測試代碼要非常簡單cd mocha
9.啟動命令
- (1).node_modules/mocha/bin/mocha
- (2)先package.json加script{"test":"mocha"},再npm test
10.配置debug命令
11.段落代碼說明
特定執行
describe.only("#indexOf()", function(){});
跳過
descrip.skip("#indexOf()", function(){});
跳過多個測試
before(function(){
if(/* check test environment */) {
//setup code
} else {
this.skip();
}
});
Diff視圖
err.actual err.expected 斷言成功失敗視圖
require導包
var testCase = require(‘mocha‘).describe;//可以用更直觀的變量名稱
重試測試
當調用this.retries(x)時,會重新調用beforeEach及afterEach方法
動態生成測試
定義慢的方法
this.slow(10000);
定義超時的方法
this.timeout(500);
代碼級別分為
套件級
describe片段
測試級
it片段
鉤子級
beforeEach中
12.mocha的測試接口
BDD,TDD,Exports,QUnit,Require
BDD接口比較常用,之前的例子都是BDD。
TDD接口是類似JUnit的調用方式。
QUNIT扁平化的樣子類似於TDD,但也支持before,after,beforeEach,afterEach
13.測試工具
Wallaby.js
mocha摩卡側邊欄
14.測試報告
spec報告器:可以輸出嵌套的分層視圖
點陣報告器:是最小化的輸出,可以用一系列字符代表測試用例,失敗是紅色嘆號,待定是藍色逗號,慢速是×××顯示
NYAN報告器:有一只貓做進度條,這個莫名其妙
TAP報告器:顯示每行單元測試明細
LANDING STRIP 報告器:飛機降落的跑道
LIST報告器:明細列表
PROGRESS進展報告器:進度條
MIN報告器:僅顯示摘要
DOC報告器:以html格式正文輸出
- (1) 安裝報告器
mocha.setup({ ui:‘tdd‘, ignoreLeaks: true, asyncOnly: true });
- (2) 參數指定報告器
mocha --reporter list --growl
- (3) 變量定義報告器
$REPORTER=nyan npm test
多次調用回調會拋錯
15.require(‘chai‘)是一個斷言庫
var should = require(‘chai‘).should();
這個可以判斷should.exist(bitcore.lib);這些內容是否存在
語言鏈
to
be
been
sinon可以創建假服務器
let server = sinon.fakeServer.create();
sinon提供spy和Stub配合斷言框架chai
模擬返回值:sinon.fake.returns(42);
模擬ajax:sinon.replace(jQuery, ‘ajax‘, sinon.fake());
模擬xhr:sinon.useFakeXMLHttpRequest();
模擬服務器:sinon.fakeServer.create()
proxyquire覆蓋依賴性(依賴註入?)
模擬database
sinon.mock(database);
16.spies、stub與mock區別
stub擁有spies的所有功能,不是為了監視調用情況,而是完全取代。
mock與stub功能一樣,都是用來替換指定函數,mock用在替換掉多個方法,stub適用於替換一個函數。
nodejs的單元測試框架mocha