Javascript 如何在karma/mocha测试套件中模拟窗口对象属性?

Javascript 如何在karma/mocha测试套件中模拟窗口对象属性?,javascript,unit-testing,reactjs,webpack,karma-mocha,Javascript,Unit Testing,Reactjs,Webpack,Karma Mocha,我正在使用karma和mocha以及React的TestUtils来测试React应用程序。我正在测试的组件之一导入具有以下导出的模块: export const OPTIONS=窗口 在我的测试中,我在karma中将组件渲染到虚拟chrome浏览器中。我是通过以下途径做到这一点的: let tree=TestUtils.renderIntoDocument() “Component”的呈现函数引用了类似于OPTIONS.someOption的内容,当上述测试运行时,它会爆炸并说无法读取未定义的

我正在使用karma和mocha以及React的TestUtils来测试React应用程序。我正在测试的组件之一导入具有以下导出的模块:

export const OPTIONS=窗口

在我的测试中,我在karma中将组件渲染到虚拟chrome浏览器中。我是通过以下途径做到这一点的:
let tree=TestUtils.renderIntoDocument()

“Component”的呈现函数引用了类似于
OPTIONS.someOption的内容,当上述测试运行时,它会爆炸并说
无法读取未定义的属性“someOption”。

我尝试在
before()
函数中“模拟”
\uuuuuu OPTIONS\uuuuuuu
变量(在测试运行之前设置它的值),但即使在注销它并看到它实际上已被设置之后,它在我的组件模块中的值仍然没有定义。因此,webpack似乎在我的任何测试脚本实际运行之前绑定了模块,因此它总是未定义的

有没有办法将
窗口设置为一个值,就好像它包含在
窗口中一样在我的页面顶部,并因此在我的组件模块中正确导入值


我不想解释为什么要将变量附加到窗口对象,因为在本例中,这是我无法避免的事情……这是Salesforce特有的原因。如果我可以完全避免使用该变量,我会。

尝试在每次
之前在
中使用
\uuuuu选项\uuuuu
将窗口对象添加到全局:

beforeEach(function() {
    global.window = {
        __OPTIONS__: {}
    };
});

我尝试了
global
路线,但是没有用……因为karma正在启动Chrome浏览器,所以窗口已经被定义好了。在不同地区进行了大量的日志记录之后,我确认了操作顺序是1。模块被捆绑在一起。测试脚本已运行。我在组件的import语句下面直接添加了一个日志,然后在测试脚本的第一行添加了一个日志,导入之后的日志总是首先报告未定义

接下来,我备份了一个步骤并查看了
tests.webpack.js
,它位于我的karma配置文件中的
文件和
预处理器(webpack)中。我在
var context=require.context('./src',true,/-test\.jsx?$/)行上方添加了变量声明
context.keys().forEach(上下文)现在可以正常工作了