公司最近牽起一片Unit Test熱,爲了迎合公司的口味,我也只能把unit test(其實我寫的不是UT,算是integration/aaceptance test了)加入其中。目前來講,nodeJs的ut框架,最有名的應該是TJ大神的mocha了 (有很詳細的官方文檔:http://visionmedia.github.io/mocha/)。廢話少說,切入正題:javascript
1、安裝:mocha是要求全局安裝的,那麼: npm install -g mochahtml
2、組織目錄結構:java
我建立了一個子目錄test,用來存放全部的test case,mocha默認會測試./test/*.js。同時我也建立了2個bat文件,用來方便執行test case:node
run.bat:執行全部的測試用例,很簡單就是調用mocha,-t 5000表示,每一個用例5秒超時(默認是2秒)git
@ECHO OFF mocha -t 5000 %1 %2 %3 %4 %5 %6 %7 %8 %9
執行完以後,會看到以下的結果:github
spec.bat:測試,而且顯示出每一個測試用例的說明(能夠用來生成描述文檔,spec這些的),代碼更簡單,就是調用run.bat,且多加了一個參數,-R spec。(mocha還支持不少其餘的報告格式的!)web
@ECHO OFF run -R spec運行以後,能夠看到以下結果:
3、測試用例編寫很簡單,我用的是BDD,assert用的是should庫,也是TJ大神的做品,另外用了request庫來執行web service:npm
var assert = require("should") , request = require('request') , settings = require('../settings'); describe('Web Service', function () { describe('/', function () { it('should return html content', function (done) { request(settings.webservice_server, function (error, response, body) { if (error) throw error; response.should.status(200).html; done(); }); }); }); describe('/products', function () { it('should return an array of products', function (done) { request(settings.webservice_server + '/products', function (error, response, body) { if (error) throw error; response.should.status(200).json; response.body.should.not.empty; var products = JSON.parse(response.body); products.should.be.an.instanceOf(Array); done(); }); }); }); });對於異步函數,執行完了,就調用下done。