Il peut arriver que vous ayez une bibliothèque qui modifie window.location et que vous souhaitiez qu'elle puisse fonctionner normalement mais aussi être testée. Si c'est le cas, vous pouvez utiliser une fermeture pour passer la référence souhaitée à votre bibliothèque, comme ceci.
/* in mylib.js */
(function(view){
view.location.href = "foo";
}(self || window));
Ensuite, dans votre test, avant d'inclure votre bibliothèque, vous pouvez redéfinir self globalement, et la bibliothèque utilisera le mock self comme vue.
var self = {
location: { href: location.href }
};
Dans votre bibliothèque, vous pouvez également faire quelque chose comme ce qui suit, afin de pouvoir redéfinir self à tout moment du test :
/* in mylib.js */
var mylib = (function(href) {
function go ( href ) {
var view = self || window;
view.location.href = href;
}
return {go: go}
}());
Dans la plupart, sinon la totalité, des navigateurs modernes, self est déjà une référence à window par défaut. Sur les plateformes qui implémentent l'API Worker, dans un Worker, self est une référence à la portée globale. Dans node.js, self et window ne sont pas définis, donc si vous le souhaitez, vous pouvez également procéder ainsi :
self || window || global
Cela peut changer si node.js implémente réellement l'API Worker.
1 votes
J'ai le même problème lorsque je veux appeler une fonction à l'intérieur de l'objet with. Comment le résoudre ?