以下は、window.location.href および/またはグローバル オブジェクト上にある可能性のあるその他のものをモックするために取ったアプローチです。
まず、直接アクセスするのではなく、オブジェクトがゲッターとセッターで保持されるモジュールにカプセル化します。以下は私の例です。私は 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 を取得します。