Ниже приведен подход, который я принял, чтобы высмеять 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, который вы положили.
я с той же проблемой, когда я хочу, чтобы вызвать функцию внутри с. Как вы его решаете? – wizztjh