BDD測試利器:mocha+should.js


  眾所周知對於任何一個項目來說,做好單元測試都是必不可少的一項工作。今天在逛CnodeJs社區的時候,無意中看到一篇介紹nodejs測試工具mocha的貼子。於是自己搗鼓了一陣之后,好像還蠻有趣的樣子,因此把我摸索入門的過程記錄下來跟大家分享一下:

   1、准備工作

  •   先新建一個項目文件夾,命名為simpleTest。
  •   然后在simpleTest文件夾中創建一個名為test的文件夾,將來用來測試的腳本都放在這個文件夾里面

 

   2、模塊安裝

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

sudo npm install -g mocha

  然后通過命令行進入到simpleTest文件夾中,安裝should模塊:

sudo npm install should

 

   3、簡單實例

  准備工作就緒之后,我們可以開始來嘗試一些簡單的實例,看看我們是如何使用mocha和should.js是進行測試工作的。可以直接先在項目根目錄下執行mocha命令,看看有什么情況發生,執行后的結果如下圖所示:

  

  運行了,但是什么都沒有發生。因為mocha掃描了test文件夾,沒有發現可以執行的測試腳本文件。下面我們往test目錄中添加一個名為test.js的測試文件,代碼如下:

 1 require("should");  2 
 3 var name = "zhaojian";  4 
 5 describe("Name", function() {  6     it("The name should be zhaojian", function() {  7         name.should.eql("zhaojian");  8  });  9 }); 10 
11 var Person = function(name) { 12     this.name = name; 13 }; 14 var zhaojian = new Person(name); 15 
16 describe("InstanceOf", function() { 17     it("Zhaojian should be an instance of Person", function() { 18         zhaojian.should.be.an.instanceof(Person); 19  }); 20 
21     it("Zhaojian should be an instance of Object", function() { 22         zhaojian.should.be.an.instanceof(Object); 23  }); 24 }); 25 describe("Property", function() { 26     it("Zhaojian should have property name", function() { 27         zhaojian.should.have.property("name"); 28  }); 29 });

 

然后重新執行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也可以與其他的第三方斷言庫搭配使用,在這里就不過多介紹了,有興趣的話可以自己去看。接下來將介紹如何對異步函數進行測試的例子。

   4、異步測試  

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

 1 var fs = require("fs");
 2 require("should");
 3 
 4 describe("readFile", function() {
 5     it("The file content should be zhaojian", function(done) {
 6         fs.readFile("text.txt", "utf8", function(err, data) {
 7             data.should.eql("zhaojian");
 8             done();
 9         });
10     });
11 });

  再創建一個名為text.txt的文本文件,其內容如下:

  

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

  

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM