Node.js 單元測試之我要寫測試

jopen 8年前發布 | 12K 次閱讀 Node.js Node.js 開發

 

Node.js 單元測試之我要寫測試

故事是這樣的:小明是一個前端工程師,近期因為個人興趣以及工作上的需要,開始做 Node.js 相關的項目。一個多月過去了,小明基于 Koa 搭出了自己的第一個 Node.js web 應用,在這個過程中,小明也遇到了很多的問題:

  • 如何在上線時保證代碼完全沒問題?
  • 每次增加功能時如何保證之前的功能是可用的?
  • 隨著代碼增多,沒有勇氣和信心去重構代碼

面對以上這些問題,小明作為一個前端工程師,慣性思維就是每次部署前先在頁面上到處點點,然而一個機智的程序員怎么能把大好時間浪費在這些重復勞動上呢,于是小明就去咨詢了組里的 Node.js 大牛老王,話說大牛畢竟是大牛,只是高冷的回復了一句:「單元測試」。

于是小明果斷去谷歌搜索了「Node.js 單元測試」,毫無意外,一大堆的介紹和教程文章,粗略讀了這些文章之后,小明得出了一些關于 Node.js 單元測試的結論,整理如下:

單元測試類型

單元測試分為 TDD(測試驅動開發)和 BDD(行為驅動開發)兩種類型,對于這兩種類型的比較,小明看的也是云里霧里,感覺單是介紹 TDD 和 BDD 就可以寫兩篇論文了。不過,選擇哪種類型不還是得看代碼怎么寫嘛,于是小明對比了兩種類型的代碼:

// TDD
suite('Array', function() {
  setup(function() {
  });

  test('equal -1 when index beyond array length', function() {
    assert.equal(-1, [1,2,3].indexOf(4));
  });
});

// BDD
describe('Array', function() {
  before(function() {
  });

  it('should return -1 when no such index', function() {
    [1,2,3].indexOf(4).should.equal(-1);
  });
});

在對比了兩種類型的語法之后,小明毫不猶豫的選擇了 BDD,因為 BDD 的語法更加符合人類的思考方式,或者更加語義一點。

單元測試框架

測試框架的職責即提供一套 API 幫助開發者更方便的測試代碼。在 JavaScript 社區有兩個比較成熟的單元測試框架:jasmine 和 Mocha, 聚焦到 Node.js 社區的話,諸如 koa, express 等多數開源項目使用的都是 Mocha. 小明自然是打開 Mocha 的官網探個究竟,不看不知道,一看嚇一跳:

Node.js 單元測試之我要寫測試

TDD/BDD 語法,異步方法測試,單測前置后置的 hook 等等,堪稱完美。來一個簡單的示例吧:

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!