我一直在研究完全相同的問題。開發人員給了我一個HTML5應用程序來測試,所以我當然不能更改他們的代碼進行測試。我決定使用qunit和sinon以及sinon-qunit。
對於福利局像我這樣的JavaScript單元測試,我會堅果與興農文檔和各種例子在網絡上,因爲大多數似乎對於未提及一個隱含的環境。下面的代碼是一個完整的頁面,所以我希望沒有什麼是混亂。
我必須調用的函數是caller()
,我無法對stubme()
做任何事情,因爲它在開發人員的代碼中。但是,我可以在我的測試代碼中添加sinonstub()
。但如何讓它與sinon一起工作? sinon文檔讓我困惑了一陣子,但下面是簡單的解決方案。 stub4stubme對象可用於控制存根操作,還可以獲取有關存根調用發生情況的信息。
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<link rel="stylesheet" href="qunit-1.12.0.css" type="text/css" media="screen" />
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<script src="sinon-1.7.3.js"></script>
<script src="qunit-1.12.0.js"></script>
<script src="sinon-qunit-0.8.0.js"></script>
<script>
// Dev code in another file
function stubme() {
return "stubme";
}
function caller() {
return "caller " + stubme();
}
// End of dev code
var sinonstub = function() {
return "u haz bin stubbed";
};
test("Stubbing global environments", function() {
equal(caller(), "caller stubme");
var stub4stubme = this.stub(window, "stubme", sinonstub);
equal(caller(), "caller u haz bin stubbed");
ok(stubme.called);
});
</script>
</body>
</html>
這種情況是不同的因爲Window.confirm()不是全局函數。 – 2015-10-19 01:48:58