Mocha測試初探

Mocha簡介:

一個具備豐富特性的javascript 測試框架,支持多種斷言庫,異步代碼測試等,不只可運行在node.js 環境中還能夠運行在瀏覽器中。javascript

1、安裝

// 全局安裝
npm install -global mocha
// 在項目中安裝
npm install --save-dev mocha

2、寫一個簡單的測試

2.1 首先新建一個項目,src 下待測試代碼,test 下寫測試用例。目錄以下
//mocha-to-go
|   package.json
|   
+---node_modules
|           
+---src
|       sum.js
|       
\---test
        sum.test.js
2.2 待測試文件 sum.js
// 求函數全部參數的和
module.exports = sum = function () {
  let args = Array.from(arguments);
  let sum = 0;
  sum = args.reduce((s, x) => {
    return s +=x
  });
  return sum;
}
2.3 新建測試腳本

mocha 支持多種斷言庫,好比should.js 、expect.js 、chai.js 等,這裏以chai.js 爲例。選擇chai.js 的Expect風格的斷言,它是行爲驅動開發(BDD)斷言的一種,接近於天然語言,容易理解。可運行在全部的瀏覽器中和node.js中java

先安裝斷言庫chai.jsnode

npm install chai --save-dev
const sum = require('../src/sum.js');
const expect = require('chai').expect;

describe('測試 sum(1,2)', function () {
  it('sum(1+2) 應該等於 3', function () {
    expect(sum(1,2)).to.be.equal(3);
  });
});

測試腳本一般包含多個describe塊,每一個塊都含有一個it塊,
describe(testName, exceFunc)
describe 第一個參數是這個測試過程的名稱,第二個參數應該是一個函數,它包含了咱們要測試的內容,也就是咱們要執行的過程。
it 是測試用例,表示一個單獨的測試,是測試的最小單位。它是一個函數。第一個參數是測試用例的名稱("1 加 1 應該等於 2")
,第二個參數是一個實際執行的函數。git

2.4 運行測試腳本

這裏我在package.json 中聲明瞭執行腳本github

"scripts": {
    "test": "mocha ./test/sum.test.js"
  }

也能夠在項目目錄直接執行npm

mocha ./test/sum.test.js

運行結果如圖:json

圖片描述

3、對異步代碼進行測試

3.1 對使用回調函數的異步請求進行測試

Mocha中測試異步代碼比較簡單,只須要在測試用例結束時調用一下回調函數便可,一般回調函數寫做done(),這樣、Mocha就能獲知這時一個異步函數,回調時才認爲測試結束。promise

新建async.js,這裏GET一個存在的json文件,來做爲一個異步過程。瀏覽器

const request = require('request');

module.exports = asyncProc = function (callback) {
  request('https://github.com/Will233/koa-template/blob/master/mock/data.json',function (err, res, body) {
    callback(err, res, body)
  });
}

測試腳本框架

const expect = require('chai').expect;
const request = require('request');

const asyncProc = require('../src/async.js');
describe('測試異步過程', function () {
  it('發送異步請求, response statusCode == 200', function (done){
    asyncProc(function (err, res, body) {
      expect(res.statusCode).to.be.equal(200)
      done()
    })
  });
});
mocha ./test/async.test.js

運行結果以下:

圖片描述

發現報錯了。這裏對異步代碼進行測試時須要注意一點,Mocha默認一個單元測試最多執行2000ms,超時會報錯。可在執行的時候用-t--timeout 指定超時閾值。
提升超時時間:

mocha -t 5000 ./test/async.test.js

運行結果以下:
圖片描述

3.2 對使用Promise的異步函數進行測試

Mocha 一樣支持了對返回promise的異步代碼進行測試。
咱們改造一下上面請求的代碼,使其返回promise。

// async.js
const asyncPromise = function () {
  return new Promise(function (resolve, reject) {
    request('https://github.com/Will233/koa-template/blob/master/mock/data.json',function (err, res, body) {
        if (err) {
          reject(err)
        } else {
          resolve(res)
        }
    });
  });
}

編寫測試用例:

describe('測試異步過程 Promise', function () {
  it('發送異步請求, response statusCode == 200', function (){
    return asyncPromise().then(function (res) {
      expect(res.statusCode).to.be.equal(200);
    });
  });
});

運行結果以下:
圖片描述

4、結語

Mocha 做爲一個強大的測試框架,還有不少特性。之後慢慢了解咯。

相關文章
相關標籤/搜索