我只是在玩一些测试,我一直在按照这个例子编写一个模块:http://www.richardrodger.com/2013/09/27/how-to-make-simple-node-js-modules-work-in-the-browser/#.Vt74CvmLT0M
我正在使用我在某处检查“窗口”的更改并使用它,否则使用“this”。我在下面简化了一个例子:
(function() {
'use strict';
var root = this;
var previous_myModule = root.myModule;
var myModule = function() { };
myModule.noConflict = function() {
root.myModule = previous_myModule;
return myModule;
};
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = myModule;
}
exports.myModule = myModule;
} else {
root.myModule = myModule;
}
}).call(typeof window !== 'undefined' ? window : this);
我复制的示例尝试模拟jquery的noConflict,以便在需要时从命名空间中删除模块。
我正在测试Mocha并使用Istanbul进行代码覆盖。我注意到“noConflict”函数没有行覆盖,所以我想我只是看一看,看看我是否可以测试它,但似乎我无法传递任何可能是“窗口”值的值。它始终未定义,而是使用“this”。
我已尝试在测试模块中设置“var window ...”和“global.window”,但这不起作用。
有没有办法可以将上下文传递给这个模块,以便我可以测试noConflict函数是否确实还原了它在“窗口”上设置的值?
编辑: 如果设置了window,则由于function.prototype.call,它将作为“this”值传递给函数。我的问题是我无法创建任何窗口但是未分配,我想在我的测试环境中模拟浏览器的行为。
console.log(window); // window is undefined here, unless inside a browser
(function() {....