所以这是交易:我iframe
在 mypage.html 中有一个单曲。使用 jQuery,我查看http://mysite.com/rest/foo
(一个公开的 REST 服务)并返回一个 XML 响应,其中包含一个 url。我将 iframe 的src
属性设置为该 URL。
现在的问题是我将如何对此进行单元测试(使用QUnit和Sinon.js)?一般来说,我对单元测试很陌生,所以我想听听一些更有经验的意见和例子。
脚本.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()
真的只做一件事:对 /rest/foo/ 进行 AJAX 调用,然后调用myCallback
,而其他是辅助方法(如果我用 Java 或 C# 编写,它们可能是私有的)......我应该测试它们吗也?从技术上讲,最终用户(查看 mypage.html 的用户)甚至无法选择指向哪个 REST 地址。我想一些合适的测试用例可能是
- 如果将有效的 restLocation 传递给
bar()
,则应设置 iframe src。 - 如果传递了无效的restLocation,则必须处理错误(以加载404之类的形式)
- 如果服务器关闭,则处理错误。
- 还要别的吗?
- 如果将有效的 restLocation 传递给
不幸的是,如果我尝试这样做$('iframe').attr('src')
,它会返回undefined
。如果我尝试使用prop()
,我会得到一个空字符串。我将如何检查是否src
已正确设置?
对不起,很长的问题。我对什么样的测试才能成为“好”的单元测试以及在这种情况下如何测试事物感到有些困惑。