單元測試:使用mocha和should.js搭建nodejs的單元測試

BDD測試利器:mocha+should.js

  衆所周知對於任何一個項目來講,作好單元測試都是必不可少的一項工做。今天在逛CnodeJs社區的時候,無心中看到一篇介紹nodejs測試工具mocha的貼子。因而本身搗鼓了一陣以後,好像還蠻有趣的樣子,所以把我摸索入門的過程記錄下來跟你們分享一下:   一、準備工做html

  • 先新建一個項目文件夾,命名爲simpleTest。node

  • 而後在simpleTest文件夾中建立一個名爲test的文件夾,未來用來測試的腳本都放在這個文件夾裏面   二、模塊安裝git

  首先使用npm以全局方式安裝mocha模塊:github

sudo npm install -g mocha

  而後經過命令行進入到simpleTest文件夾中,安裝should模塊:npm

sudo npm install should

   3簡單實例異步

  準備工做就緒以後,咱們能夠開始來嘗試一些簡單的實例,看看咱們是如何使用mocha和should.js是進行測試工做的。能夠直接先在項目根目錄下執行mocha命令,看看有什麼狀況發生,執行後的結果以下圖所示:函數

  

  運行了,可是什麼都沒有發生。由於mocha掃描了test文件夾,沒有發現能夠執行的測試腳本文件。下面咱們往test目錄中添加一個名爲test.js的測試文件,代碼以下:工具

 require("should");

var name = "zhaojian";

describe("Name", function() {
    it("The name should be zhaojian", function() {
        name.should.eql("zhaojian");
    });
});

var Person = function(name) {
    this.name = name;
};
var zhaojian = new Person(name);

describe("InstanceOf", function() {
    it("Zhaojian should be an instance of Person", function() {
        zhaojian.should.be.an.instanceof(Person);
    });

    it("Zhaojian should be an instance of Object", function() {
        zhaojian.should.be.an.instanceof(Object);
    });
});
describe("Property", function() {
    it("Zhaojian should have property name", function() {
        zhaojian.should.have.property("name");
    });
});

而後從新執行mocha命令,獲得的結果以下:單元測試

  

 

能夠看到控制檯上已經顯示四個測試用例都成功經過了。若是有測試用例沒有經過的話,例如咱們加上判斷name是否是等於epson的語句,控制檯的顯示以下:測試

    

  控制檯中的信息會明確地告訴咱們有多少個測試用例沒有經過,而且指出沒有經過的測試用例是在哪一個模塊中的哪一個單元。

  接下來咱們來分析一下以前的代碼,首先爲了使用should.js的斷言庫,在代碼的開頭部分必須引入should模塊,可是mocha模塊則無需顯式引入。

  每個describe語句均可以看做是一個測試模塊,它只是起着劃分各個模塊部分的做用,describe語句的第一個參數就是對該模塊的描述。

  在describe語句中的it語句纔是測試的主體部分,每個it語句都是一個測試單元,一個測試模塊中能夠有不少個測試單元。it語句的第一個參數的做用就是描述該單元的測試任務或要求,以便在測試用例數量較多時能夠清楚地知道究竟有哪些功能的測試沒有經過。

  在it語句的回調函數中就能夠經過書寫should.js斷言庫中的語句進行測試了。should模塊是assert模塊的擴展,它的語法能夠在上面的代碼中看到,都是相似zhaojian.should.be.an.instanceof(Person) 這樣的,跟咱們平常用的語法幾乎如出一轍, 很是易於使用。因爲篇幅的關係,我只在前面舉了一些簡單的例子,有關更多should.js的用法能夠參考這裏的文檔: https://github.com/visionmedia/should.js。另外mocha也能夠與其餘的第三方斷言庫搭配使用,在這裏就不過多介紹了,有興趣的話能夠本身去看。接下來將介紹如何對異步函數進行測試的例子。

   四、異步測試  

  接下來爲了進行異步測試,在test目錄下建立一個名爲testReadFile.js的文件,代碼以下:

var fs = require("fs");
require("should");

describe("readFile", function() {
    it("The file content should be zhaojian", function(done) {
        fs.readFile("text.txt", "utf8", function(err, data) {
            data.should.eql("zhaojian");
            done();
        });
    });
});


  再建立一個名爲text.txt的文本文件,其內容以下:

  

  執行mocha命令進行測試,結果以下:

  

  觀察上面的代碼,有一點必須注意的是:在進行異步測試的時候,it語句的回調函數會帶有一個參數done。咱們必須在要測試的異步函數的回調函數的最後加上done()這一句,不然測試就會出錯,由於測試不等異步函數執行完畢就結束了。

相關文章
相關標籤/搜索