2013-07-16 92 views
0

所以這裏的交易:mypage.html中有一個iframe。使用jQuery,我查看了http://mysite.com/rest/foo(一個公開的REST服務)並獲取了一個包含url的XML響應。我將iframe的src屬性設置爲該URL。如何對使用REST API的JS進行單元測試?

現在的問題是,我將如何對此進行單元測試(使用QUnitSinon.js)?一般來說,我對單元測試很陌生,所以我想聽聽一些更有經驗的觀點和例子。

的script.js:

$(document).ready(function() { 

    function setUrl(url) 
    { 
     $('iframe').attr('src', url); 
    } 

    function throwError() 
    { 
     // Error handling 
    } 

    function myCallback(response) 
    { 
     var url = $(response).find("url"); 

     if (!url.text()) throwError(); 
     else setUrl(url.text()); 
    } 

    function bar(restLocation, callback) 
    {  
     $.get("http://mysite.com/rest/" + restLocation, callback); 
    } 

    bar("foo", myCallback); 
}); 

特別,我想了解一下下面的事情:

  1. 我猜我需要所有這些功能都暴露在全局命名空間來測試它們。這是絕對必要的,還是有辦法在document.ready()函數中測試它們?

  2. 我應該測試哪個函數? bar()真的只做一件事:做一個AJAX調用/ rest/foo /,然後調用myCallback,而其他人是輔助方法(如果我用Java或C#編寫它,它們可能是私有的)......我應該測試他們呢?技術上,最終用戶(查看mypage.html的用戶)甚至沒有選擇指向哪個REST地址。

  3. 我想如果一個有效的restLocation傳遞給bar()一些合適的測試案例可能是

    • ,將IFRAME SRC應設置。
    • 如果傳遞了無效的restLocation,則必須處理該錯誤(以加載404或其他東西的形式)
    • 如果服務器關閉,則處理該錯誤。
    • 還有什麼?

不幸的是,如果我嘗試做$('iframe').attr('src'),它返回undefined。如果我嘗試使用prop(),我會得到一個空字符串。如何檢查src是否已正確設置?

對不起,長期以來的問題。我對於什麼樣的測試能夠做出「良好」的單元測試以及如何在這種情況下測試事情感到困惑。

+0

難道真是一個單元測試,如果你調用REST API?如果這是其他任何事情,我會分開處理來自REST調用的結果的代碼和實際進行REST調用的代碼;然後單元測試處理結果的代碼。有一個似乎適用的單元測試租戶:不要測試你不擁有的代碼。 –

回答

0

首先,你應該把突入read功能到一個名爲函數的函數,所以你可以這樣調用

$(document).ready(myFunction) 

現在你罵myFunction的到您的測試,而不需要模擬$.ready功能。

測試將是這樣的:

test(sets the iFrameUrl", function() { 
    var server = sinon.fakeServer.create(); 
    server.respondWith('responseUrl'); 
    server.autoRespond = true; 
    $('body').append('iframe') 
    myFunction(); 
    equal($('iframe').attr('src'), 'responseUrl', 'iframe url') 
}) 
+0

謝謝。最後,我只是重構了整個事情,並對測試採取了一些建議。 – dashik

相關問題