[譯] JavaScript 單元測試框架:Jasmine, Mocha, AVA, Tape 和 Jest 的比較

JavaScript 單元測試框架: Jasmine, Mocha, AVA, Tape 和 Jest 的比較

當開始開發新前端項目的時候,我常常會問本身兩個問題:「我應該用那一個 JavaScript 單元測試框架呢?」 和 「我應該花時間去添加測試代碼嗎?」javascript

個人同事常常寫一些有關單元測試如何讓腦子平靜下來且減小軟件錯誤的文章。因此我也總會花時間來作測試。可是在你的項目中應該選那個框架來作測試呢?在匆忙作出決定以前,我搜集了 5 個最受歡迎的 JavaScript 單元測試框架,讓你決定那一個纔是最合適你的。html

有效的單元測試是減小你軟件錯誤的一部分。要讓你的單元測試更健壯還須要用到一些 JavaScript 調試小技巧前端

注意:若是你已經有更喜歡的測試框架而且它沒有出如今下面列表中,在評論中讓我知道我會添加到文章中。java

JavaScript 單元測試框架:比較

Jasmine

Jasmine 是一個咱們要比較的 JavaScript 單元測試框架

最受歡迎的 Javascript 單元測試框架之一,Jasmine提供全部你所須要的功能而且開箱即用。android

  • Jasmine 帶有 assertions(斷言),spies (用來模擬函數的執行環境),和 mocks (mock 工具),很是完美地配備幾乎是你開始寫單元測試時須要的全部東西。Jasmine 初始化設置簡單同時若是你須要一些單元功能的時候你仍然能夠加一些庫進來 (括號內容:譯者注)
  • 全局性使它更容易在你的應用中當即開始測試。雖然我並不喜歡全局性,可是和 Jasmine 提供給開發者所有須要的開箱即用功能,並無太多的不一致的地方
  • 我發現獨立版本能讓它更容易去理解全部東西是怎樣設置的,並能讓你能馬上開始使用它
  • 時至今日已經能和 Angular 1 或者 Angular 2 或者更多流行庫組合使用了

我對 Jasmine 的見解ios

我不是佔有全局變量環境的粉絲,因此 Jasmine 會在個人小本子上面丟些分。在另外一方面,它有不少很好的即開即用功能。它看上去會顯得稍微 「老些」 比起其它在這列表的框架,可是這並非一件壞事,其它框架可能遇到的痛點,意味着它們更應更容易被解決。git

AVA

AVA 是一個咱們要比較的 JavaScript 單元測試框架

一個簡約的測試庫,AVA 它的優點是 JavaScript 的異步特性和併發運行測試, 這反過來提升了性能。angularjs

  • AVA 不會建立全局環境給你,所以你能更容易控制你所使用的內容。我想這會給測試帶來額外的清晰度確保你清楚什麼正在發生
  • 利用了 JavaScript 的異步特性優點爲測試提供了額外的好處。最主要的好處是優化了在部署的時間等待
  • 保留了簡單的 API 爲你提供你所須要的功能。若是你搭配 mocking 來使用它會顯得更加友好,可是你必須安裝一個單獨的庫
  • 當你想知道應用 UI 何時會有超出預期的改變的時候 jest-snapshot 提供了很是好用的快照測試

我對 AVA 的見解es6

Ava 「最有見地的」 是極簡方法, 還有他不是佔有全局環境的,這讓他在個人小本子上得到很高的分數。簡單的 API 讓測試更清晰。在你選擇 JavaScript 單元測試框架的時候,AVA 測試庫你是絕對應該嘗試的。github

Tape

Tape 是一個咱們要比較的 JavaScript 單元測試框架

這是在這份框架列表上最小的一個框架,Tape 是最直接開門見山的,提供最基礎的功能。

  • 就像 AVA 同樣,Tape 不提供全局環境,取而代之的是得要你本身導入他們。 這仍是很不錯的只要它不污染到全局環境
  • Tape 不包括安裝/卸載方法. 取兒替之的是, 它選擇了一個多模塊系統在那裏你須要明肯定義安裝代碼在每個測試裏面以使每一個測試更清晰。 它同時會阻止狀態在測試之間共享
  • 支持 Typescript/coffeescript/es6
  • 簡易快速地搭建以及運行,Tape 是一個你能夠在任何能夠運行 JavaScript 的環境中運行的 JavaScript 文件,而且沒有過多的配置選項

我對 Tape 的見解

Tape 包含更底層,比 AVA 功能更少的 API,並以此爲傲。Tape 讓全部事情變得簡單,只給你所須要的東西。這就是爲何 Tape 在個人小本子上有着高分數而且是最好的 JavaScript 單元測試框架之一,它讓你更專一於產品而不是工具的選擇。

Mocha

Mocha 是一個咱們要比較的 JavaScript 單元測試框架
Mocha logo

做爲能夠說是使用最多的庫,Mocha 是一個靈活的庫,提供給開發者的只有一個基礎測試結構。而後其它功能性的功能如 assertions, spies,mocks,和像它們同樣的其它功能須要引用添加其它庫/插件來完成。

  • 若是你想要更靈活的配置,導入你特定須要的庫,那麼 Mocha 額外的安裝與所須要的配置是你必需要看的
  • 不幸的是,上面的觀點確實還存在問題,它必須導入額外的庫來實現 assertions (譯者注:斷言功能)。若是不是長時間使用,這確實意味着比其它的更難一點去設置. 他們說,設置一般只是一次性操做,可是我更喜歡去作一個 「單一來源的事實」 (文檔) 代替在文檔間跳來跳去地設置
  • Mocha 導入測試結構做爲全局變量,省去你的時間你再也不須要 include 或者請求它在每一個文件中。缺點是不管如何那些插件仍是要你使用 require 導入到裏面,這會致使不一致,若是你像我同樣是個 OCD (譯者注:強迫症患者) 它最終會把你弄瘋的!

我對 Mocha 的見解

可擴展性和數種不一樣配置 Mocha 的方式另我印象深入。必須去學習 Mocha,而後也必須去學習你選擇的 assertion 庫這的確嚇到了我很多。靈活性在於它的 assertions,spies 和 mocks 帶給它的高收益。

Jest

Jest 是一個咱們要比較的 JavaScript 單元測試框架

被 Facebook 和各類 React 應用推薦和使用,Jest 獲得了很好的支持。Jest 也被發現是一個很是快速的測試庫在平行測試報告中。

  • 對於小型項目來講你可能在開始的時候不用過多擔憂,而性能的提升對於但願全天 持續部署 的大型應用 app 來講是很是之好的
  • 而開發人員主要是用 Jest 去測試 React 應用,Jest 能夠很容易地集成到其它應用程序中充許你使用更獨特的特性在其它地方
  • 快照測試是一個很是好用的工具去確保你的應用 UI 不會有超出預期的錯誤在產品發佈替換的期間發生。雖然大部分功能專門設計都是使用在 React 上,可是它也能在其它框架上面若是你能找到合適的插件
  • 不像在這列表上其它的庫,Jest 有着很廣闊的 API ,除非你真的須要一些額外的功能需求,否則不須要你導入額外的庫 隨着他們的每一次更新Jest 繼續大幅改進功能

我對 Jest 的見解

在全局變量是一個缺點,Jest 是一個不斷髮展功能強大的庫。它有不少易於理解的文檔幫助學習,而且支持各類不一樣環境,當構建項目的時候這些環境都顯示很棒。

我應該選那一個 JavaScript 單元測試框架?

在我研究了一些不一樣的框架以後,我得出一個結論,框架並不是都是非黑即白的。

大部分框架最終都會(Mocha 除外)在一天結束的時候提供給你你所須要的東西,這是一個測試環境同確保給出的 X -> Y 總回被返回的機制,有幾個會簡單的會給你更多 「華而不實的東西。」

你在選擇他們的時候你本身應該充滿自信,而個人選擇取決於你和你特定項目想要的和須要的。

  • 若是你要求有一個普遍的 API 和特定 (可能獨一無二) 的功能那麼 Mocha 可能會是你的選擇 由於可擴展性就在那裏
  • AVA 或者 Tape 會給你最低的環境要求。很是好地爲你提供一個堅實的最基礎環境讓你能快速開展測試
  • 若是你有一個大項目, 或者想快速開始不須要太多配置,那麼 Jest 將會是一個很好的選擇

我但願這將在你選擇你的 JavaScript 單元測試框架時有所幫助。若是你但願我還看一下其它 JavaScript 單元測試框,在評論中讓我知道!我會將它們稍後加到列表中。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索