【发布时间】:2016-08-19 14:45:55
【问题描述】:
我正在使用 karma 和 mocha 以及 React 的 TestUtils 来测试 React 应用程序。我正在测试的组件之一导入具有以下导出的模块:
export const OPTIONS = window.__OPTIONS__;
在我的测试中,我将组件渲染到 karma 中的虚拟 chrome 浏览器中。我这样做是通过:
let tree = TestUtils.renderIntoDocument(<Component />);
“组件”的渲染函数引用OPTIONS.someOption 之类的东西,当上面的测试运行时,它会爆炸并显示cannot read property 'someOption' of undefined.
我尝试在before() 函数中“模拟”__OPTIONS__ 变量(在测试运行之前设置它的值),但即使在将其注销并看到它实际上已设置后,该值我的组件模块中的它仍然未定义。所以看起来 webpack 在我的任何测试脚本实际运行之前捆绑了模块,因此它总是未定义的。
有没有办法将window.__OPTIONS__ 设置为一个值,就好像它包含在我页面顶部的<script>window.__OPTIONS__ = {};</script> 中一样,因此可以在我的组件模块中正确导入一个值?
我不想解释为什么要将变量附加到窗口对象,因为在这种情况下这是我无法避免的……这是 Salesforce 的特定原因。如果我可以完全避免使用该变量,我会的。
【问题讨论】:
标签: javascript unit-testing reactjs webpack karma-mocha