Di seguito è l'approccio che ho preso per deridere window.location.href e/o qualsiasi altra cosa che potrebbe essere su un oggetto globale.
In primo luogo, piuttosto che accedervi direttamente, incapsularlo in un modulo in cui l'oggetto viene mantenuto con un getter e un setter. Di seguito è il mio esempio. Sto usando require, ma non è necessario qui.
define(["exports"], function(exports){
var win = window;
exports.getWindow = function(){
return win;
};
exports.setWindow = function(x){
win = x;
}
});
Ora, dove si hanno normalmente fatto nel codice qualcosa come window.location.href
, ora si dovrebbe fare qualcosa di simile:
var window = global_window.getWindow();
var hrefString = window.location.href;
Infine l'installazione è completa e si può testare il codice sostituendo la finestra oggetto con un oggetto falso che vuoi essere al suo posto invece.
fakeWindow = {
location: {
href: "http://google.com?x=y"
}
}
w = require("helpers/global_window");
w.setWindow(fakeWindow);
Questo cambierebbe la variabile win
nel modulo finestra. Inizialmente era impostato sull'oggetto globale window
, ma non è impostato sull'oggetto della finta finestra che hai inserito. Quindi, dopo averlo sostituito, il codice otterrà il tuo finto oggetto della finestra e il suo falso href che l'hai messo.
io avendo lo stesso problema quando voglio chiamare una funzione all'interno del con. Come lo risolvi? – wizztjh