下面是我用来模拟 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。