天天看點

《JavaScript忍者秘籍》——2.3 測試架構

本節書摘來自異步社群《javascript忍者秘籍》一書中的第2章,第2.3節,作者:【美】john resig(萊西格) , bear bibeault(貝比奧特)著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

測試套件應該作為基本開發流程的一部分,是以應該選擇一個非常适合自己代碼風格和代碼庫的測試套件。一個javascript測試套件應該滿足一個唯一需求:顯示測試的結果,以便很容易地确定哪些測試通過的,哪些是失敗的。測試架構可以幫助我們達到這一目标,除了建立測試并将其組織到測試套件中以外,不用再擔心别的事情。

根據測試的需要,我們可以從javascript測試架構中找到很多功能。其中一些功能包括:

能夠模拟浏覽器行為(單擊按鍵等)。

測試的互動式控制(暫停和恢複測試)。

處理異步測試逾時問題。

能夠過濾哪些會被執行的測試。

一項非正式的調查,試圖統計人們在日常開發過程中使用哪種javascript測試架構,其結果非常具有啟發性。圖2.5描述的令人沮喪的事實是,很多人根本不測試。通常情況下,大家會很容易認為非測試人員的比例實際上是更高的。

《JavaScript忍者秘籍》——2.3 測試架構

另一個從該結果得出的觀點是,絕大多數的腳本編寫者,在編寫測試用例時都選擇如下四個工具中的一個:jsunit、qunit、selenium以及yui test。測試工具的前十大“赢家”,如圖2.6所示。

《JavaScript忍者秘籍》——2.3 測試架構

這是一個有趣的結果,其表明沒有一個有絕對優勢的測試架構。但更有趣的是有相對較少使用者的一次性架構的數量,如圖2.6所示。

應該注意的是,從頭開始編寫一個測試架構是很容易,如果要更好地了解一個測試架構是如何實作的,這是一個好辦法。這是一個特别有趣的練習,因為在編寫一個測試架構時,我們通常是要處理純javascript,而無需過多擔心跨浏覽器的問題。除非我們想模拟浏覽器事件,如果是這樣(盡管我們将在第13章解決這個問題)祝你好運!

根據圖2.6顯示的結果,許多人得出同樣的結論,并編寫了大量的一次性架構以适應自己的特殊需要。雖然可以編寫一個專有的單元測試架構,但很有可能我們想用的是預先建構的架構。

一般的javascript單元測試架構會提供一些基本元件:一個測試運作器、測試分組以及斷言。還有一些測試架構提供了異步運作測試的功能。讓我們簡要看一些最受歡迎的單元測試架構。

2.3.1 qunit

qunit最初是用于測試jquery的單元測試架構。它的發展已經超出其最初的目标,目前是一個獨立的單元測試架構。qunit主要是為單元測試提供一個簡單的解決方案,提供最小但卻易于使用的api。

qunit的特點如下:

簡潔的api。

支援異步測試。

不限于jquery或使用jquery的代碼。

特别适合于回歸測試。

2.3.2 yui test

yui test是yahoo !建構并開發的測試架構,于2008年10月釋出。為了配合yui3的釋出,2009年yui test被完全重寫。yuitest提供了大量的特性和功能,以確定覆寫代碼庫所需要的任何單元測試用例。

yui test的特點如下:

廣泛和全面的單元測試功能。

良好的事件仿真。

2.3.3 jsunit

jsunit是流行的java junit測試架構在javascript語言上的實作。盡管它仍然是最流行的javascript單元測試架構之一,但也是最古老的(無論是代碼年齡還是代碼品質)。該架構最近沒有進行太多更新,是以要測試大家熟知的現代浏覽器的代碼,jsunit可能不是最好的選擇。

2.3.4 新出的單元測試架構

根據junit的首頁資訊,pivotal labs團隊現在正專注于一個名為jasmine的新測試工具。

接下來,我們要看一看如何建立測試套件。