mocha教程

本文爲閱讀博文http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html 後  節選與整合而得

爲什麼要寫單元測試

比如,現在我們隨着代碼日加冗餘,之前爲了趕項目,趕進度,弄得代碼混亂不堪,想要重構,可是,難道我們想要每重構一小部分就去瀏覽器上查看功能是否受損,而且很有可能受損的時候也檢查不出來嗎?通過單元測試,我們可以簡單的輸入測試命令,就檢查出重構是否破壞了我們代碼的邏輯。其實單元測試就是書寫出出我們程序的重要邏輯,然後每次進行測試就是檢查這些邏輯是否被遵守,是否被破壞。

下載mocha

通過npm 下載
npm install -g mocha//全局安裝,這樣不只在當前目錄下,在其他目錄下也可以直接使用mocha咯
下載斷言插件 本文使用的是chai
<pre name="code" class="plain">npm install chai



測試腳本的寫法

首先,要測試,得有要測試得東西呀,我們先寫一個add函數
// 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,同樣需要下載
    npm install chai
    chai有很多斷言風格,expect,alert以及should,任選一種即可,本文使用的是expect風格
    var expect = require('chai').expect;
    
    只要沒有斷言拋出錯誤,則測試用例就算通過。

開始測試

同步測試

mocha命令後緊跟測試腳本的路徑和文件名即可測試指定腳本。如當前add.js文件和add.test.js都在一個文件夾demo中,我們進入demo文件夾通過以下代碼就可以執行測試add.test.js
mocha add.test.js
測試結果:
mocha默認的是執行當前文件夾下的test文件夾中的代碼,所以一般測試代碼都直接寫在test文件夾下,這樣我們只需要以下指令就可以測試test文件夾下第一層的所有測試文件了
mocha
而若我們想運行不只第一層的js代碼,而是所有代碼 包括test的子文件夾下的js代碼,則通過以下指令
mocha --recursive

異步測試

mocha默認每個測試用例用時最多2000ms,若超過該時間測試用例仍然未結束,則報錯。
在異步測試中,必須向當前測試用例中傳入done參數,並且在測試結束時調用該函數,告訴mocha測試結束了。不然mocha會一直等到測試超時並且報錯。以下爲異步測試的實例
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);
    });
})

由於以上異步測試必定用時超過2000ms,於是我們通過指令來調整mocha的測試用例限時爲5000ms,指令如下
$ mocha -t 5000 add.test.js

發佈了109 篇原創文章 · 獲贊 11 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章