所以這裏的交易:mypage.html中有一個iframe
。使用jQuery,我查看了http://mysite.com/rest/foo
(一個公開的REST服務)並獲取了一個包含url的XML響應。我將iframe的src
屬性設置爲該URL。如何對使用REST API的JS進行單元測試?
現在的問題是,我將如何對此進行單元測試(使用QUnit和Sinon.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);
});
特別,我想了解一下下面的事情:
我猜我需要所有這些功能都暴露在全局命名空間來測試它們。這是絕對必要的,還是有辦法在
document.ready()
函數中測試它們?我應該測試哪個函數?
bar()
真的只做一件事:做一個AJAX調用/ rest/foo /,然後調用myCallback
,而其他人是輔助方法(如果我用Java或C#編寫它,它們可能是私有的)......我應該測試他們呢?技術上,最終用戶(查看mypage.html的用戶)甚至沒有選擇指向哪個REST地址。我想如果一個有效的restLocation傳遞給
bar()
一些合適的測試案例可能是- ,將IFRAME SRC應設置。
- 如果傳遞了無效的restLocation,則必須處理該錯誤(以加載404或其他東西的形式)
- 如果服務器關閉,則處理該錯誤。
- 還有什麼?
不幸的是,如果我嘗試做$('iframe').attr('src')
,它返回undefined
。如果我嘗試使用prop()
,我會得到一個空字符串。如何檢查src
是否已正確設置?
對不起,長期以來的問題。我對於什麼樣的測試能夠做出「良好」的單元測試以及如何在這種情況下測試事情感到困惑。
難道真是一個單元測試,如果你調用REST API?如果這是其他任何事情,我會分開處理來自REST調用的結果的代碼和實際進行REST調用的代碼;然後單元測試處理結果的代碼。有一個似乎適用的單元測試租戶:不要測試你不擁有的代碼。 –