下面是我用来模拟 window.location.href 和/或其他任何可能在全局对象上的方法。
首先,不是直接访问它,而是将它封装在一个module中,在该module中,对象由一个 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
窗口module中的变量。它最初设置为全局window
对象,但未设置为您放入的假窗口对象。所以现在替换它后,代码将获取您放置的假窗口对象及其假 href。