下面是我用來模擬window.location.href和/或可能在全局對象上的其他任何東西的方法。
首先,不是直接訪問它,而是將它封裝在一個模塊中,其中的對象由getter和setter保存。以下是我的例子。我正在使用require,但在這裏沒有必要。
define(["exports"], function(exports){
var win = window;
exports.getWindow = function(){
return win;
};
exports.setWindow = function(x){
win = x;
}
});
現在,你已經常在你的代碼像window.location.href
做,現在你會做這樣的事情:
var window = global_window.getWindow();
var hrefString = window.location.href;
最後設置完成後,你可以通過更換窗口中測試代碼對象與你想代替它的地方的假對象。
fakeWindow = {
location: {
href: "http://google.com?x=y"
}
}
w = require("helpers/global_window");
w.setWindow(fakeWindow);
這會改變窗口模塊中的win
變量。它最初設置爲全球的window
對象,但它並未設置爲您放入的假窗口對象。因此,現在,在您替換它之後,代碼將獲得假窗口對象及其假的href。
我有同樣的問題,當我想調用一個函數內。你如何解決它? – wizztjh 2011-07-28 07:55:23