下面是我用来模拟 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;
最后设置完成,您可以通过将 window 对象替换为您希望在其位置的假对象来测试您的代码。
fakeWindow = {
location: {
href: "http://google.com?x=y"
}
}
w = require("helpers/global_window");
w.setWindow(fakeWindow);
这将更改win
窗口模块中的变量。它最初设置为全局window
对象,但未设置为您放入的假窗口对象。所以现在替换它之后,代码将获取您的假窗口对象及其假href。