Mocha實踐

公司最近牽起一片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。
相關文章
相關標籤/搜索