是否可以在没有esm
或babel
的情况下使用Jest测试ES6模块?由于node v13
自带es6支持,因此已经尝试过:
//package.json
{
…
"type": "module"
…
}
//__tests__/a.js
import Foo from '../src/Foo.js';
$ npx jest
Jest encountered an unexpected token
…
Details:
/home/node/xxx/__tests__/a.js:1
import Foo from '../src/Foo.js';
^^^^^^
SyntaxError: Cannot use import statement outside a module
在添加babel时,它可以工作,但是es6模块也可以本机使用吗?
答案 0 :(得分:11)
是的,可以从jest@25.4.0
开始。从此版本开始,ESM具有原生支持,因此您不再需要使用babel来转换代码。
尚未记录,但是根据this issue,您必须执行3个简单的步骤来实现该目标(撰写此答案时):
import
,确保您不会变换transform: {}
语句node@^12.16.0 || >=13.2.0
标志运行--experimental-vm-modules
jest-environment-node
或jest-environment-jsdom-sixteen
运行测试。因此,您的笑话配置文件应至少包含以下内容:
export default {
testEnvironment: 'jest-environment-node',
transform: {}
...
};
要设置--experimental-vm-modules
标志,您将必须从package.json
运行Jest,如下所示(我希望以后会改变):
"scripts": {
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
}
我希望这个答案对您有所帮助。
答案 1 :(得分:2)
我按照接受的答案中提供的提示进行操作,但是我在"type": "module"
中添加了属性package.json
,以使工作正常。这就是我所做的:
在package.json
中:
"devDependencies": {
"jest": "^26.1.0",
"jest-environment-jsdom-sixteen": "^1.0.3",
"jest-environment-node": "^26.1.0"
},
"scripts": {
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
},
"type": "module",
"jest": {
"transform": {},
"testEnvironment": "jest-environment-jsdom-sixteen"
}
答案 2 :(得分:1)
除了@Radovan Kuka的答案外,以下是使用npx
通过ES模块运行Jest的方法:
"test:monitoring": "npx --node-arg=--experimental-vm-modules jest -f monitoring.test.js --detectOpenHandles",
好处是不需要提供绝对的node_modules
路径。
答案 3 :(得分:1)
请注意,这仍处于试验阶段,但是我们已经记录了如何进行测试,因此希望可以减少混乱。