是否可以在没有< code>esm或< code>babel的情况下使用Jest测试ES6模块?由于< code >节点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模块也可以原生使用吗?
是的,可以通过<code>jest@25.4.0代码>。从这个版本开始,有一个esm的本地支持,所以您不再需要使用babel来传输代码。
它还没有被记录下来,但根据这个问题,你必须做3个简单的步骤来实现这一点(在撰写这个答案时):
中设置 transform: {}
来转换导入语句node@^12.16.0 ||
所以你的笑话配置文件至少应该包含这个:
export default {
testEnvironment: 'jest-environment-node',
transform: {}
...
};
要设置< code >-experimental-VM-modules 标志,您必须从< code>package.json运行Jest,如下所示(我希望将来会有所改变):
"scripts": {
"test": "node --experimental-vm-modules node_modules/jest/bin/jest.js"
}
我希望这个答案对你有帮助。
请注意,这仍然是实验性的,但我们已经记录了如何测试这一点,所以希望能减少混乱。
https://jestjs.io/docs/en/ecmascript-modules
https://stackoverflow.com/a/61653104/1850276的步骤是正确的
我遵循了接受答案中提供的提示,但我在包中添加了属性
以便jest正常工作。这就是我所做的:“type”:“module”
。json
在pack. 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"
}