一個具備豐富特性的javascript 測試框架,支持多種斷言庫,異步代碼測試等,不只可運行在node.js 環境中還能夠運行在瀏覽器中。javascript
// 全局安裝 npm install -global mocha
// 在項目中安裝 npm install --save-dev mocha
//mocha-to-go | package.json | +---node_modules | +---src | sum.js | \---test sum.test.js
// 求函數全部參數的和 module.exports = sum = function () { let args = Array.from(arguments); let sum = 0; sum = args.reduce((s, x) => { return s +=x }); return sum; }
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
這裏我在package.json 中聲明瞭執行腳本github
"scripts": { "test": "mocha ./test/sum.test.js" }
也能夠在項目目錄直接執行npm
mocha ./test/sum.test.js
運行結果如圖:json
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
運行結果以下:
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); }); }); });
運行結果以下:
Mocha 做爲一個強大的測試框架,還有不少特性。之後慢慢了解咯。