mocha 是一個功能豐富的javascript測試框架,能夠運行在nodejs和瀏覽器環境,使異步測試變得簡單有趣。mocha 串聯運行測試,容許靈活和精確地報告結果,同時映射未捕獲的異經常使用來糾正測試用例。javascript
支持TDD/BDD 的 開發方式,結合 should.js/expect/chai/better-assert 斷言庫,能輕鬆構建各類風格的測試用例。java
特色node
安裝npm
經過npm全局安裝:數組
npm install -g mocha
咱們首先來見識一下mocha最基本的測試用例是怎麼的結構,以下:瀏覽器
測試用例:框架
//模塊依賴 var assert = require("assert"); //斷言條件 describe('Array', function(){ describe('#indexOf()', function(){ it('當值不存在時應該返回 -1', function(){ assert.equal(-1, [1,2,3].indexOf(5)); assert.equal(-1, [1,2,3].indexOf(0)); }); }); });
示例解析: 測試用例首先須要引用斷言模塊,如上文中var assert = require('assert');,代碼 assert.equal(-1, [1,2,3].indexOf(5)); 中使用的是assert.equal(actual, expected, [message]) 語法。做用等同於使用'=='進行相等判斷。actual爲實際值,expected 爲指望值。message爲返回的信息。異步
運行測試
Mocha:$ mocha
斷言(assert)指的是對代碼行爲的預期。一個測試用例內部,包含一個或多個斷言(assert)。ui
斷言會返回一個布爾值,表示代碼行爲是否符合預期。測試用例之中,只要有一個斷言爲false,這個測試用例就會失敗,只有全部斷言都爲true,測試用例纔會經過。
好比上節示例中的:
assert.equal(-1, [1,2,3].indexOf(5)); assert.equal(-1, [1,2,3].indexOf(0));
實際值(-1)和指望值([1,2,3].indexOf(5))是同樣的,斷言爲true,因此這個測試用例成功了。
mocha 容許開發者使用任意的斷言庫,當這些斷言庫拋出了一個錯誤異常時,mocha將會捕獲並進行相應處理。這意味着你能夠利用如 should.js斷言庫、 Node.js 常規的 assert 模塊或其它相似的斷言代碼庫。如下是衆所周知的適用於Node.js或瀏覽器的斷言庫:
Chai 是一個很是靈活的斷言庫,它可讓你使用以下三種主要斷言方式的任何一種:
這是來自老派測試驅動開發的經典的assert方式。好比:
assert.equal(variable, "value");
這種鏈式的斷言方式在行爲驅動開發中最爲常見。好比:
expect(variable).to.equal("value");
這也是在測試驅動開發中比較經常使用的方式之一。舉例:
variable.should.equal("value");
expect 庫應用是很是普遍的,它擁有很好的鏈式結構和仿天然語言的方法。一般寫同一個斷言會有幾個方法,好比expect(response).to.be(true) 和 expect(response).equal(true)。如下列舉了 expect 經常使用的主要方法:
在課程開始講解什麼是mocha的時說:mocha支持TDD/BDD 的 開發方式,結合 should.js、expect、chai、better-assert 斷言庫,能輕鬆構建各類風格的測試用例。這裏面有兩個知識點,一個是斷言庫,另外一個是 TDD/BDD 。
更多的內容和示例、練習請參考: http://www.hubwiz.com/course/562085141bc20c980538e25a/