本文爲閱讀博文http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html 後 節選與整合而得
爲什麼要寫單元測試
下載mocha
npm install -g mocha//全局安裝,這樣不只在當前目錄下,在其他目錄下也可以直接使用mocha咯
下載斷言插件 本文使用的是chai
<pre name="code" class="plain">npm install chai
測試腳本的寫法
// add.js
function add(x, y) {
return x + y;
}
module.exports = add;
現在,對這個函數進行測試,我們測試的腳本名通常與要測試得文件同名,但後綴名爲.test.js(表示測試)或者.spec.js(表示規格)
// add.test.js
var add = require('./add.js');
var expect = require('chai').expect;
describe('加法函數的測試', function() {
it('1 加 1 應該等於 2', function() {
expect(add(1, 1)).to.be.equal(2);
});
});
結合上面這段測試代碼我們來說下,在mocha中,一段測試代碼由這些內容構成。- 測試套件。表示一組相關的測試,由一個或多個測試用例組成。通過describe塊來表示。
- 測試用例。測試代碼的最小單位。通過it塊來表示
- 斷言。用來判斷源碼的實際執行結果與預期是否一致,若不一致則拋出錯誤。react並沒有斷言庫,需要自己引入。斷言庫有很多,本文使用的是chai,同樣需要下載
chai有很多斷言風格,expect,alert以及should,任選一種即可,本文使用的是expect風格npm install chai
只要沒有斷言拋出錯誤,則測試用例就算通過。var expect = require('chai').expect;
開始測試
同步測試
mocha add.test.js
測試結果:mocha
而若我們想運行不只第一層的js代碼,而是所有代碼 包括test的子文件夾下的js代碼,則通過以下指令mocha --recursive
異步測試
var expect = require('chai').expect;
describe('asyn', function () {
var a = false;
it('asyn', function(done) {
var f = function() {
a = true;
expect(a).to.be.equal(true);
done();
};
setTimeout(f, 4000);
});
})
$ mocha -t 5000 add.test.js