我們公司網站就二個Programmer,都是前後端一起來,前端用到的框架就是jQuery
最近改一些陳年舊code,有時不小心會改到爛掉,在想說是不是要來寫測試,不過另外一個programmer說CP值不高......
所以想問大家,在寫JavaScript的時候會寫測試嗎,寫測試有CP值的考量嗎?什麼樣的情況適合來寫測試?
另外問問,如果有寫測試的話,是用哪一套工具
http://www.facebook.com/groups/javascript.tw/
其實在facebook上的javascript group,有某人轉這篇,不少javascript神人都有發表意見,不妨上去參考一下。另外,建議下週四的活動去參加一下,聽聽TonyQ大神講Selenium這套工具。
要做測試,基本上你的程式要寫到「可測試的程度」,這意味Javascript要有一定的組織,許多功能你要把它整理成函數,然後針對函數來做測試。這是一般做單元測試的起碼標準。像JsUnit或是QUnit這些工具,基本上只是提供一個做測試的框架,讓你方便驅動測試,並且驗證結果。不過如果這些跟改變/操作DOM混在一起,要測試結果也蠻困難的。
建議:如果在一些處理資料跟商業邏輯的部份,已經至少用函數整理好,那就可以用JsUnit或是QUnit這些工具來測試這些部分。至於處理UI變化的部份,則使用Selenium來做。
Selenium提供了許多語言的Web Driver支援,你可以利用工具先錄製你要測試的動作,然後把這些動作輸出成不同語言的程式碼(Java, PHP, C#, Python...),再來做細部調整,或是用自動化工具來驅動。
最近有一個新聞,Mozilla跟Google已經向W3C提出Web Driver API標準制定的申請,我想在不久的將來,所有瀏覽器都可以支援這一個測試標準。參考:http://www.w3.org/TR/2012/WD-webdriver-20120710/
一些UI的東西,像是CSS沒設好導致某些動作畫面跑掉等等,需要用視覺做確認的東西,基本上是很難測試的。
不過有一個自動化工具叫做sikuli,他使用影像辨識做條件來進行介面操作,讓你可以用截圖來操作瀏覽器(或其他程式),只是我不太確定他是否可以用來做視覺效果的驗證。你可以研究一下看看。
Selenium 有截圖功能,也是能作一定程度的圖像比對,
只是功能沒有很完整(印象中是有幾個瀏覽器的支援有問題),真的很有愛的話也可以算是堪用。
喔喔喔,讚。週四一定不能錯過。
剛剛在CommonJS晃到:
http://wiki.commonjs.org/wiki/Unit_Testing/1.0
關於單元測試的API規格,開始會有標準做法。
謝謝提供連結,有去看過了,果然是非常專業的討論...
關於把函試寫到可測試的程度,這一點有感覺,因為以前的一些code,都是很肥的函式,即使想測試,也不知道從哪裡下手
其實我有一種感覺,不知道大家是不是跟我一樣,雖然可以寫出(簡單的)測試,不過是不是這樣測,真的對日後的維護有用,也不是很有信心,我想這也是我同事說cp值不高的原因吧...
這一篇連結的回答也可以提供方向:
http://stackoverflow.com/questions/96086/developing-ui-in-javascript-using-tdd-principles
但是一些操作例如AJAX等會花比較多時間,像這樣用同步的方式來做,我不太確定是否做的出來
測試bug,是用 firefox 配外掛 firebug 抓。
至於效能測試,也還好,自從改用jQuery之後,就沒有寫過又臭又長的code了。況且現在PC和瀏覽器效能都不錯,比較不會有這個問題。