将上下文传递给“require”d javascript模块

时间:2016-03-08 16:34:44

标签: javascript node.js mocha

我只是在玩一些测试,我一直在按照这个例子编写一个模块: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() {....

0 个答案:

没有答案