萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> 如何尋找一個好的Javascript單元測試工具

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

讓我們看看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的架構:

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

3. JsTestDriver

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

優勢:

●支持所有主要的浏覽器和操作系統

●一次運行多個客戶端

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

●可以在命令行(jar)運行測試(可以被ant/maven集成)

●Eclipse插件

●IntelliJ插件

●支持多種Javascript測試框架

缺點:

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

●不支持測試歷史結果

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

JsTestDriver的運行概覽如下: JsTestDriver

alt text

Eclipse插件截圖: JsTestDriver for Eclipse

alt text

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

4. YUI Yeti

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

發布於2010年8月25日:

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

項目地址:http://yui

copyright © 萬盛學電腦網 all rights reserved