我的设定
- 节点v14.16.0
- 我有一个测试文件,其中包含一个用ESM模块(
import
)编写的简单测试。 - 在
package.json
中我有一个脚本(下面的Jest documentation适应了Windows):"test": "set \"NODE_OPTIONS=--experimental-vm-modules\" && npx jest"
- 我的测试运行w/
npm run test
(上面的脚本)
**我的目标:**使用jest运行ESM测试。
我的尝试次数:
(1)CommonJS应用程序(含.js测试)
package.json
包含"type": "commonjs"
- 名为
test.js
的测试文件 - 错误:
SyntaxError: Cannot use import statement outside a module
(这是预期的,因为测试是以commonjs档案执行。)
(2)CommonJS应用程序(含.mjs测试)
package.json
包含"type": "commonjs"
- 测试文件名为
test.mjs
- 错误:
No tests found
(Jest找不到文件?)
(3)ESM应用程序,带有.js或.mjs
package.json
现在具有"type": "module"
- 名为
test.mjs
或test.js
的测试文件 - 错误:
ReferenceError: module is not defined at ...jest.config.js:6:1
(4)CommonJS应用程序和CommonJS测试
package.json
包含"type": "commonjs"
- 名为
test.js
的测试文件,但使用commonjsrequire
语法(并且不包含我希望包含的ESM模块);请注意,这不是我想要的,但包括在内只是为了表明测试本身没有问题。 - 测试运行良好并通过
6条答案
按热度按时间mbyulnm01#
下面是我使用ESM运行Jest的测试步骤。测试中的源文件也是使用ESM编写的。
1.将节点版本设置为14.16.0
1.安装Jest:
1.将
"type": "module"
加到package.json
1.更新
package.json
中的test
脚本:1.创建包含以下内容的
jest.config.js
文件:1.使用默认的
testMatch
(我的在__tests__
目录中)至少可以找到一个测试1.运行测试:
在GitHub的magic-comments-loader仓库中有一个更完整的例子。
k7fdbhmy2#
对于我的工作,只需要设置脚本“test”如下:
还有别忘了-〉
npm i cross-env jest
wqnecbli3#
经过大量的调整,这是我成功的设置(重要的部分):
package.json
具有jest.config.mjs
(是,es模块)必须包含
"js"
是时代模块的历史遗留物,其中明显是.js文件。请遵循https://github.com/facebook/jest/issues/12116进行更新。bfhwhh0e4#
这里是你需要的最低限度。 prop @卢克为上面的评论与testMatch的答案,我需要。
package.json
-确保"type": "module"
在其中jest.config.js
-将以下glob添加到testMatch
数组中:"**/?(*.)+(spec|test).(m)js"
1.确保测试文件以
.spec.mjs
或.test.mjs
结尾,以匹配glob1.将
npm test
脚本设置为node --experimental-vm-modules ./node_modules/.bin/jest
就是这样。您***不需要***jest配置中的转换设置为the documentation suggests。
xhv8bpkk5#
在我的情况下,离开
"type": "module"
和重命名
jest.config.js
至jest.config.cjs
babel.config.js
至babel.config.cjs
工作过的
goucqfw66#
我按照@morganney的答案,但我得到这个错误:
"basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")..."
。所以为了使它工作,我使用了documentation中的属性"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
。因此,我的package.json最终配置如下: