1. 程式人生 > >node測試框架:mocha+should.js

node測試框架:mocha+should.js

對於任何一個專案來說,單元測試都是必不可少的一項工作。nodejs也是一樣。

  關於js的測試框架有很多,最終我選擇了mocha。

相比其他測試框架,它有以下幾個優點:

  • 與nodejs結合更自然(它支援瀏覽器和node端測試。)
  • 可使用多種風格的DSL,比如should/expect等
  • 非同步方法測試簡單
  • 支援before,after(即beforeAll/afterAll)

下面是安裝使用過程

 1、模組安裝

  首先使用npm以全域性方式安裝mocha模組:

sudo npm install-g mocha

  然後通過命令列進入到simpleTest資料夾中,安裝should模組:

sudo npm  install  should

 2、

[[email protected] nodejs]# mkdir test

vi test.js

編輯test.js

   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()這一句,否則測試就會出錯,因為測試不等非同步函式執行完畢就結束了。

長按圖片識別圖中二維碼(或搜尋微信公眾號FrontEndStory)關注“前端那些事兒”,帶你瞭解最新的前端技術。


相關推薦

node測試框架mocha+should.js

對於任何一個專案來說,單元測試都是必不可少的一項工作。nodejs也是一樣。   關於js的測試框架有很多,最終我選擇了mocha。 相比其他測試框架,它有以下幾個優點: 與nodejs結合更自然(它支援瀏覽器和node端測試。)可使用多種風格的DSL,比如sho

淺談單元測試mocha + should.js

為什麼要進行單元測試? 測試常常是程式設計師十分厭倦的一個活動。測試能給我們帶來什麼?瞭解這些是非常重要的,測試不可能保證一個程式是完全正確的,但是測試卻可以增強我們對程式完整的信心,測試可以讓我們相信程式做了我麼期望它做的事情。測試能夠使我們儘早的發現程式的 bug

基於C#實現的自動化測試框架發布自動觸發自動化回歸測試

exc 時間流 測試用例 出現 服務器 text types filter txt 接口自動化測試用例完成以後,以前都是發布以後手動運行測試用例。雖然手動運行下腳本也就是一個F5的事情,但是離自動化測試的標準差得很遠。這兩天有了個大膽的想法,想要實現以下發布時直接觸發自動化

【轉】自動化測試框架 pytest&allure ,提高自動化健壯性和穩定性

序 在之前,我寫過一個系列“從零開始搭建一個簡單的ui自動化測試框架(pytest+selenium+allure)”,在這個系列裡,主要介紹瞭如何從零開始去搭建一個可用的自動化工程框架,但是還缺乏了一些細節的補充,例如對於自動化測試而言,如何提高其測試的穩定性? 本篇文章,將會和讀者一起探討這個

自動化測試框架自己的框架

這段時間一直在為公司內部開發自動化測試框架,簡稱GTF。這些程式碼都是公司的財產,不方便共享。當然了,如果公司願意,我倒願意開源了。 不說這些了,因為這個框架現在還屬於開發階段,很多事都是言之過早。最近幾個博文中,我會持續將我在架構過程中的想法寫下來。供自己和大家一起分享。

python中更人性化的一個單元測試框架nose2

如果你學過 python 進行自動化測試,你一定使用過 unittest。今天我們要講的 nose2 是一個高階版本的 unittest。他比 unittest 更容易理解,用起來也更加方便一些。 快速開始 nose2 在 unittest 的基礎上開發的,所以如果你之前是用 unittest 做測試,但是

node】----mocha單元測試框架-----【格爾尼卡ぃ】

ins number ber moc tutorial ride 對象 單元測試框架 cal 一、mocha簡介 單元測試是用來對一個模塊、一個函數、或者一個類來進行正確性的檢測工作 特點: 既可以測試簡單的JavaScript函數,又可以測試異步代碼,

介紹Node assert, should.js, mocha, Karma, Travis CI

是什麼? [Node assert] (http://nodejs.cn/api/assert.html) 官方說明:assert 模組提供了斷言測試的函式,用於測試不變式。 有嚴格模式(strict mode)與遺留模式(legacy mode)兩種模式,建議只使用嚴格模式。 檢視

最受歡迎的5款Node.js端到端測試框架

過程 hub pytho 版本 Suite sel 提交表單 earch 靈活 測試,尤其是自動化測試在現代 WEB 工程中有著非常重要的角色,與交付過程集成良好的自動化測試流程可以在新版發布時幫你快速回歸產品功能,也可以充當產品文檔。測試因粒度不同又可以分為單元測試、接口

初探 Node.js 框架eggjs (環境搭配篇)

eggjs 是一個優秀的 Node.js 框架 概述:為什麼標題上說 eggjs 是一個優秀的 Node.js 框架(可跳過)? 換言之,我們為什麼選擇 eggjs 進行開發而不是之前初學時使用的 Express 框架呢?     Express 是最著名的 Node.js 框架,它甚至是官方唯一推

selenium2學習單元測試框架(1)

xtu urn ace pda -- col 開頭 認識 users 1 單元測試框架 1.1 認識單元測試 Unittest提供了全局的main()方法,使用他可以方便地將一個單元測試模塊變成可以直接運行的測試腳本。Main()方法使用testload

selenium2學習單元測試框架(2)

__init__ module asc 單獨 sci str mos ddt IT 1.4 Discover更多測試用例 discover(start_dir,pattern=‘test*.py‘,top_level_dir=None) 找到指定目錄下所有測試模塊,

Python 各種測試框架簡介(三)nose

調用 QQ upm href 命令 math 一點 發現 方法 轉載:https://blog.csdn.net/qq_15013233/article/details/52527260 摘要 這裏將從(pythontesting.net)陸續編譯四篇 Python 測試框

安卓自動化測試Robotium(二)page object 模式完善測試框架

near pre image 控件 自動 coo IV warn activit 1、目前比較流行的設計模式就是page object,page object就是把頁面作為對象,在使用中傳遞頁面對象,來使用頁面對象中相應的成員或者方法,能更好的提現java的面向對象和封裝特

solidity測試指令碼小心js裡坑爹的數值計算

前天在除錯solidity程式碼時,發現一個極為詭異的行為:solidity中存數的數值,當使用web3取出的時候,數值是錯的——與solidity中的值對不上! solidity中的程式碼大概是這樣的: mapping (uint => uint) public data;

掘金 AMA我是阿里 Node 基礎框架 EggJS 的核心開發者天豬,你有什麼問題要問我?

掘金 AMA(ask me anything) 是掘金沸點的一個話題,掘金團隊會邀請一位技術大牛通過「你問我答」的形式回答你的問題,讓大家在技術、工作、生活方面有所成長。 AMA 嘉賓 掘金 AMA 第十期嘉賓是 阿里 Node 基礎框架 EggJS 的核心開發者-- 天豬。

[翻譯]pytest測試框架(二)使用

此文已由作者吳琪惠授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 呼叫pytest 呼叫命令: python -m pytest [...] 上面的命令相當於在命令列直接呼叫指令碼 pytest [...](前提是python已經加入環境變數) 一些幫

Mocha 與 Jest 測試框架比較

  一.Jest 什麼是Jest?   Jest是由facebook釋出的,最近比較火熱的一個測試框架。 Jest的優勢 (1)Jest容易安裝配置   Jest可以說是零配置的,它會自動識別一些測試檔案。只要用npm安裝jest之後執行jest,即可完成測試,非

第二章自動化測試框架Cucumber,Ruby實戰----環境搭建

1.配置Ruby環境 1.安裝JDK,並配置環境變數 2.Jruby-9.1.2.0 下載地址:https://pan.baidu.com/s/1kiDe_pkeVzqmViKihwx91A 將壓縮包下載到本地,並解壓。 配置環境變數: PATH=c:\jruby-9.1.2

頂級測試框架Jest指南跑通一個完美的程式,就是教出一群像樣的學生

facebook三大專案:yarn jest metro,有橫掃宇宙之勢。 這個專案的宗旨為:減少測試一個專案所花費的時間成本和認知成本。 ——其實,它在讓你當一個好老師。jest文件非常簡略、難以閱讀, 因此才有了這篇文章。 jest是vue和vue-cli技術棧