【发布时间】:2018-09-14 22:49:18
【问题描述】:
在一个笑话测试中,我需要导入一个声明一些全局函数的 javascript 模块。这个 javascript 模块是从 django (ex jsi18n) 自动生成的,它是一个自动调用函数
(function(globals) {
var django = globals.django || (globals.django = {});
...
}(this));
这有助于在 react 组件中使用翻译。例如,使用全局定义函数 gettext() 在我们的 .jsx 文件中包含翻译字符串
<p>{ gettext('got it') }</p>
我尝试使用标准格式导入模块
import './djangojs';
不过开玩笑的报错
TypeError: Cannot read property 'django' of undefined
因为this 它是未定义的(严格模式)。所以我尝试手动编辑模块并在末尾添加}(this || window)); 并正常工作。
但是该模块每次都是自动生成的。那么如何在不手动编辑文件的情况下将this 绑定到window 以使用全局对象呢?
【问题讨论】:
-
向维护 Django 的人提交错误。他们的代码生成器很讨厌。他们为什么不使用 UMD?
-
你可以模拟整个
./djangojs。 -
如何模拟它? @dfsq
-
使用
jest.mock。 -
@dfsq 它不起作用,因为
this仍未定义
标签: javascript node.js ecmascript-6 babeljs jestjs