【发布时间】:2021-10-27 14:00:51
【问题描述】:
我的设置
- 节点 v14.16.0
- 我有一个测试文件,其中包含一个使用 ESM 模块 (
import) 编写的简单测试。 - 在
package.json我有一个脚本(遵循Jest documentation适应Windows):"test": "set \"NODE_OPTIONS=--experimental-vm-modules\" && npx jest" - 我的测试使用
npm run test(上面的脚本)运行
我的目标:使用 jest 运行 ESM 测试。
我的尝试:
(1) 带有 .js 测试的 CommonJS 应用程序
-
package.json包含"type": "commonjs" - 测试文件名为
test.js - 错误:
SyntaxError: Cannot use import statement outside a module(这是预期的,因为测试是作为 commonjs 文件运行的。)
(2) 带有 .mjs 测试的 CommonJS 应用程序
-
package.json包含"type": "commonjs" - 测试文件名为
test.mjs - 错误:
No tests found(Jest 没有找到文件?)
(3) 带 .js 或 .mjs 的 ESM 应用程序
-
package.json现在有"type": "module" - 名为
test.mjs或test.js的测试文件 - 错误:
ReferenceError: module is not defined at ...jest.config.js:6:1
(4) CommonJS App和CommonJS测试
-
package.json包含"type": "commonjs" - 测试文件名为
test.js,但使用commonjsrequire语法(并且没有我想要包含的ESM 模块);请注意,这不是我想要的,只是为了表明测试本身没有问题。 - 测试运行良好并通过
【问题讨论】:
-
你提到你的测试文件是一个ES模块,但是你的测试文件呢?另外,如果您似乎真正需要的是 ES 模块测试,为什么还要提到您使用测试文件作为 Common JS 模块(在 #4 中)?
-
您是否尝试过使用
cross-env进行任何尝试?请注意 Jest 文档第二步中关于使用您链接到的 ESM 的评论:“在 Windows 上,您可以使用 cross-env 来设置环境变量。” -
@OfirD -- 我的测试是超级简单的占位符,甚至还没有连接到测试文件,并且没有任何错误表明这类事情是一个问题。对于#4,我解释它只是为了表明测试文件没有问题。
-
@Morgan -- 我没有尝试
cross-env,因为这个项目的所有开发人员都在 Windows 机器上,我希望少一点依赖。set适用于 Windows (docs.microsoft.com/en-us/windows-server/administration/…) -
@Luke 我听说你少了一个依赖。我之所以提出它,是因为我提供的答案没有使用
NODE_OPTIONS。
标签: javascript node.js jestjs node-modules