非死book推出JavaScript單元測試和自動化Mock工具Jest

jopen 10年前發布 | 8K 次閱讀 Jest

  英文原文:非死book Unveils Jest for JavaScript Unit Testing, Automatic Mocking

  非死book 發布了 Jest,一個開源的、基于 Jasmine 框架的 JavaScript 單元測試工具。

  Jest 源于 非死book 兩年前的構想,用于快速、可靠地測試 Web 聊天應用。它吸引了公司內部的興趣,非死book 的一名軟件工程師 Jeff Morrison 半年前又重拾這個項目,改善它的性能,并將其開源。

  在最基礎層面,Jest 被設計用于快速、簡單地編寫地道的 JavaScript 測試。Jest 自動模擬 require ()返回的 CommonJS 模塊,并提供了包括內置的測試環境 Dom API 支持、合理的默認值、預處理代碼和默認執行并行測試在內的特性。通過在并行進程中同時運行測試,Jest 讓測試更快地結束。

  Morrison 說:

Jest 的目標是減少開始測試一個項目所要花費的時間和認知負荷,因此它提供了大部分你需要的現成工具:快速的命令行接口、Mock 工具集以及它的自動模塊 Mock 系統。

此外,如果你在尋找隔離工具例如 Mock 庫,大部分其它工具將讓你在測試中(甚至經常在你的主代碼中)寫一些不盡如人意的樣板代碼,以使其生效。

我們已經在 非死book 親眼看到花更多的時間用于開發你的應用是多么重要(相對于花時間去準備開發你的應用),而這就是 Jest 關注并正在解決的問題。

</blockquote>

  Jest 與 Jasmine 框架的區別是在后者之上增加了一些層。最值得注意的是,運行測試時,Jest 會自動模擬依賴。Jest 自動為每個依賴的模塊生成 Mock,并默認提供這些 Mock,這樣就可以很容易地隔離模塊的依賴。Morrison 說對于新測試,默認會進行隔離,開發人員現在也能夠“完全控制”需要隔離多少模塊。每個測試都可以指明哪些模塊應該或者不應該 Mock。

  關于自動化 Mock,非死book 的文檔有進一步的說明

實際上,Jest 在測試環境中執行自己的 require ()函數。Jest 的自定義 require ()函數加載真正的模塊,檢查它是什么樣子,然后基于它所看到的創建一個 Mock 版本并返回。也就是說,Jest 將給你一個與真實模塊具有相同形狀的對象,但它模擬每一個 Export 值而不是實際的值。

</blockquote>

  盡管 Jest 引入了自動化 Mock,需要注意的是,開發者仍然可以使用 jest.mock ()和 jest.dontMock ()控制哪些應該或者不應該進行 Mock。

  來自社區的反應絕大部分都很正面。在 Hacker News,用戶 Cthulu 說

看起來很有趣:我們現在的 AngularJS 項目的測試套件越來越慢,部分原因是逐漸增加的測試,但主要的性能瓶頸是:

  • 沒有并行,即使測試套件全部是獨立的;
  • DOM 測試,導致大量的 GC 暫停;
  • (可能是)PhantomJS 啟動和初始化(未度量)。
  • </ul>

    我已經做了簡單的優化,將我的那些測試分成兩半,開兩個終端運行(開發時和持續測試中),但它看來有點玄。

    </blockquote>

      直接應對依賴注入和 AngularJS,非死book 說:“Jest 使用不同的方法來達到相同的結果。”對于 Angular,依賴作為參數進行傳遞,因此測試很容易寫。然而,非死book 指出,為了 Angular 中函數的可測性,開發者必須遵循其特定模式,將其傳遞給 Angular 的依賴注入框架。Jest 的解決方案略有不同:

    Jest 也能以 Angular 相同的方式 Mock 依賴,但它使用 CommonJS,而不是構建一個特定的模塊加載器。這讓你能夠測試任何使用 CommonJS 的現有代碼,不需要重度重構以使其兼容其它模塊系統。

    </blockquote>

      用戶 Caiob 認同關于 Jest 的樂觀情緒,他也是這種依賴注入方法的擁護者,他說:“非死book 能夠提升像 Jasmine 這樣的現有/熟悉的工具,這非常棒。并且,我喜歡他們處理 CommonJS 模塊的方式。”

      Morrison 說,通過 Jest,非死book 希望開始這樣一種趨勢,讓測試變得更簡單,讓開發者有更多時間開發應用。InfoQ 讀者如果想參與這個項目,可以檢出 Github 庫并發送 Pull 請求,或者在 Freenode 加入#jestjs。

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