如何尋找一個好的Javascript單元測試工具

來源:互聯網
上載者:User

讓我們看看Javascript單元測試的現狀和測試載入器。

1.JsUnit

我們已經在使用它來作為我們的單元測試工具了。

優勢:

●可以被ant構建檔案調用;

●啟動瀏覽器來運行測試案例;

●Eclipse外掛程式支援;

缺點:

●需要啟動瀏覽器來運行測試案例;

●不支援用js檔案來寫單元測試代碼:它必須嵌入在html檔案中;

●它已經好幾年沒更新了;

注意:

●有一個測試載入器叫JsUnit(2);

●“ant”是一個開源構建工具;之所以叫“Ant”因為它很小,但是可以用來構建大型項目;

2.RhinoUnit

優勢

●ant驅動

●支援js檔案

●很容易使用

缺點

●類比的Javascript引擎不夠優秀來支援我們的代碼。我嘗試過用它來運行“在JsUnit上運行正常”的測試代碼,但是在載入我們的通用Javascript檔案時遇到了問題

3.crosscheck

優勢

●可以被ant構建檔案調用

●類比了真實瀏覽器行為

缺點

●類比的Javascript引擎僅有少有的幾個瀏覽器版本

●兩年沒有更新了:不支援Firefox 2.x 或 3.x

4.jsspec

優勢

●運行在真實的瀏覽器上

缺點

●Javascript只有架構,無法被ant構建檔案調用

5. jspec

優勢

●運行在真實的瀏覽器上

缺點

●貌似不支援我們的代碼,我嘗試運行了”在JsUnit上運行正常“的測試代碼,但是在載入我們的通用Javascript檔案時遇到問題

●Javascript只有架構,無法被ant構建檔案調用

6. Screw.unit

優勢

●運行在真正的瀏覽器中

缺點

●Javascript只有架構,無法被ant構建檔案調用

注意:我們使用過它,但是它比jsspec和jspec還要小。

這麼看來JsUnit是我們唯一的選擇。注意它已經在其他組件中被使用了。它不是完美的,它沒有提供一個方便的實現測試驅動開發(TDD)的方法:

●它沒有提供一個簡單、整合的方法來運行單元測試

●它強制你在html檔案中寫單元測試,而不是js檔案

●它強制你安裝一個本地JsUnit架構,來避免寫入程式碼js的單元測試檔案的路徑

其結果是,當你在”測試驅動開發“Javascript的時候,不得不在你的IDE和你要測試的瀏覽器之間來回切換。這是可行的,但是我不認為這是高效的(這裡我可能錯了)。

當然我還在尋找一個更好的Javascript編輯器或者是能夠很容易實現引用和重構的Eclipse外掛程式。WTP項目中有一部分叫JSTD的外掛程式,然而我沒有足夠的使用經驗來評論它。

總結,我不認為我們有工具可以完全實現”TDD“。我們可以 TOD(面向測試的開發),但是我還沒有找到任何能夠讓我們像寫Java一樣高效地寫Javascript的工具。再次聲明,理想的解決方案會和JUnit類似。

你在使用什麼單元測試工具?

得票最高的答案,來自gregers

1. Buster.js

與JsTestDriver(之後會談到)的server/client概念類似。除了server是使用Node.js實現的,而不是Java。並且API遵循了JS的最佳實務。

一個瀏覽器Javascript測試載入器庫。自動化瀏覽器測試(想下JsTestDriver吧),qunit風格的靜態HTML頁面測試,可以在無介面的瀏覽器(phantomjs,jsdom…)和其他瀏覽器中測試。看看它的概覽吧!

一個Node.js測試載入器庫。你有相同的測試案例庫,斷言庫等等。這對同時支援瀏覽器和Node.js的代碼來說很好。使用Buster.JS寫你的測試案例,然後在Node.js和真實瀏覽器中運行。

截圖:Buster.js入門 (2:45)

優勢:

●使用Node.js,相容Win/OS X/Linux

●可以在普通瀏覽器或無介面瀏覽器PhantomJS(快了)中運行

●一次運行多個用戶端

●支援Nodejs測試

●不需要在開發機器上運行 server/clients(不需要安裝IE)

●在命令列中運行測試(可以被ant/maven整合)寫xUnit或BDD風格的測試

●支援多個Javascript測試架構

●支援延緩測試而不是把代碼注釋掉

●內建SinonJS

●在儲存的時候自動運行測試

●代理跨域的請求:

●可以擴充包含其他測試架構(內建JsTestDriver)

●加上你自己的斷言/拒絕

●報表(xunit XML, traditional dots, specification, tap, teamcity和更多內建的)

●自訂或替換在瀏覽器測試中啟動並執行HTML

●TextMate和Emacs整合

缺點:

●還在beta中,有很多bug

●還沒有Eclipse或IntelliJ的外掛程式

●不像TestSwarm那樣以os/browser/version方式組織結果。 註:它會,但是只在測試結果中列印瀏覽器名字和版本

●沒有像TestSwarm那樣的曆史支援,看不到之前的測試結果

註:當你需要為Buster.js提供一個獨立的CI服務,TestSwarm也可以作為持續整合(CI)服務。不過Buster.js可以輸出xUnit XML報表,所以它可以很容易的被整合到Hudson,Bamboo等CI服務中。

2. TestSwarm

TestSwarm是John Resig(jQuery作者)建立的分布式Javascript測試載入器。主要用於開源Javascript項目的測試,但是TestSwarm也是開 源的,所以你可以為自己配置一台TestSwarm伺服器用於企業測試。不過這可能需要你做不少的修改。

優勢

●Javascript的持續整合服務

●支援所有的主要瀏覽器和作業系統

●一次運行多個用戶端

●不需要在開發機器上運行server/client (不需要安裝IE)

●當你提交東西(或修改指令碼)的時候,在所有用戶端上自動運行測試

●顯示每次提交的測試曆史結果

●支援多種Javascript測試架構

●有針對作業系統和瀏覽器版本的結果

●Crowdsource to test in a multitude of browsers

缺點:

●無法通過ant/maven來打斷測試

●在提交之前無法知道測試案例失敗

●沒有IDE外掛程式支援

http://ejohn.org/blog/javascript-testing-does-not-scale/

TestSwarm的架構:

3. JsTestDriver

一些google的工程師也開始了一個分布式Javascript工具的開發,JsTestDriver。它和TestSwarm類似,它有一個伺服器,並且用戶端是與伺服器保持串連。但是它也支援從命令列運行,並且有Eclipse和IntelliJ的外掛程式!

優勢:

●支援所有主要的瀏覽器和作業系統

●一次運行多個用戶端

●不需要在開發機器上運行server/client (不需要安裝IE)

●可以在命令列(jar)運行測試(可以被ant/maven整合)

●Eclipse外掛程式

●IntelliJ外掛程式

●支援多種Javascript測試架構

缺點:

●不顯示作業系統或瀏覽器版本。只有瀏覽器名字,不過它在測試結果中會列印版本

●不支援測試曆史結果

●項目不是很活躍,更新慢

JsTestDriver的運行概覽如下: JsTestDriver

Eclipse外掛程式截圖: JsTestDriver for Eclipse

簡單的介紹視頻:http://www.youtube.com/watch?v=V4wYrR6t5gE

4. YUI Yeti

Yahoo現在已經在自己的服務上運行測試Javascript,Yeti。基於Node.js構建。它可以運行你現有的YUI-test,並且支援多種瀏覽器。既然它可以通過命令列運行,所以我猜測它和JsTestDriver類似。

發佈於2010年8月25日:

如果你對它很熟悉,請提供給我更多的資訊:

項目地址:http://yuilibrary.com/projects/yeti/

5. Jasmine

這個測試載入器可能會引起”對Ruby/Ruby on Rails熟悉“的開發人員的注意。它的文法是基於RSpec,RSpec被用於Rails項目的測試。

Jasmine是一個行為驅動開發(BDD)的Javascript測試架構。它不依賴任何其他的Javascript架構。它也不依賴DOM。

如果你對它很熟悉,請提供給我更多的資訊:)

項目首頁:https://github.com/pivotal/jasmine/

6. QUnit

QUnit專註於瀏覽器上的Javascript測試,故而提供了儘可能多的方便。來自官方網站的簡介:

QUnit是一個強大的、便於使用的Javascript單元測試庫。jQuery、jQuery UI和jQuery Mobile項目都使用了它。它也完全可以用來測試通用的Javascript代碼

QUnit與TestSwarm有些相同的曆史:

QUnit是jQuery的一部分,也由John Resig開發。在2008年,它有了自己的個人首頁、名字和API文檔,允許其他人使用它用作單元測試。當時它還是基於jQuery的。2009年時一 次重構解決了這個問題,如今QUnit完全獨立於jQuery。QUnit的斷言方法遵循了CommonJS單元測試標準,此標準也一定程度受到了 QUnit的影響。

項目首頁:http://qunitjs.com/

7. Sinon

Sinon.js是另一個很棒的測試載入器。它由《Test-Driven JavaScript Development》一書的作者Christian Johansen開發。他認為這是最棒的。

為Javascript提供獨立的spies,stubs和mocks。沒有任何依賴,可以與任何單元測試架構協同工作。

http://tddjs.com/

註:本文由周敏明編譯自Stack Overflow同名問答貼,其他回複可參見 StackOverflow 原帖

文章來源:伯樂線上

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.