JavaScript重構(三):JavaScript的測試

來源:互聯網
上載者:User

進行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”
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.