JavaScript重構(三):JavaScript的測試

進行JavaScript重構時,我希望引入易於使用的測試框架來保證重構的順利進行,未來能持續通過測試代碼對JavaScript邏輯的正確性做保障。
JsUnit (http://sourceforge.net/projects/jsunit/,http://www.jsunit.net/)
JsUnit是一個獨立的JavaScript單元測試框架,和JUnit差不多,沒有上手難度,包括傳統的setUp和tearDown,提供的assert方法也和JUnit類似,多瞭assertNaN和assertUndefined等等JavaScript特有的方法。測試頁面必須在<head>裡面引入jsUnitCore.js這個js文件。
測試套件的支持:提供瞭addTestPage和addTestSuite;
測試日志的支持:包括warn、info和debug三種日志級別,前端編碼不似後臺代碼,正式代碼中不宜使用過多log,再說log也隻有FF下才支持。
 
千言萬語不及一個例子:
Js代碼 
<script language="javascript" src="jsUnitCore.js"></script>  
<script language="javascript" src="play.js"></script> //模塊JS  
 
function testWithMainProcess() {  
  assertEquals("Web play url", "##http://…##", webOnlinePlay());  

 
項目的代碼裡到處是Ajax調用,要做單元測試,看來打樁是不可避免瞭。Mock類的工具有許多,比如適合JQuery的QMock:
Js代碼 
var mockJquery = new Mock();  
mockJquery  
.expects(1)  
.method('ajax')  
.withArguments({  
  url: 'http://xxx,  
  success: Function,  
  dataType: "jsonp"  
})  
.callFunctionWith({ feed : { entry : "data response" }});  
 
這個樁正是mock瞭一個假的ajax jason返回:[feed:[entry:"data response"]],看看,使用就和以前接觸過的EasyMock差不多嘛。
 
對於JavaScript測試框架感興趣的同學還可以瞭解一些其他的測試框架,例如JSpec。
 
單元測試代碼建議就放在模塊的包內:test.html,即便理想狀況下,模塊單獨發佈時,也是伴隨著測試用例的可靠的前端代碼。
從哪些JavaScript代碼開始做?
1、函數式的代碼。這樣的代碼保證獨立性好,也不需要打什麼樁,測試成本低,如果不明白函數式的代碼的含義,請參見“函數式編程”。
2、復雜的邏輯。
是否嘗試TDD?不建議在我們團隊內部使用,前端TDD需要更高的技巧,對人的因素要求更高。如果有一天,後臺Java代碼的TDD做好瞭,那麼換成JavaScript的代碼,沒有本質區別。
 
如果效果得當,為什麼不能把JavaScript的UT集成到ICP-CI上作為持續集成的一部分呢?

作者“四火的BLOG”
 

You May Also Like