是否可以在没有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添加了一个transpiler,它可以工作,但是es6模块也可以本地使用吗?
6条答案
按热度按时间cyej8jka1#
是的,从
jest@25.4.0
开始是可能的。从这个版本开始,有了对esm的原生支持,所以你不必再用babel来翻译你的代码了。这一点尚未记录在案,但根据this issue,您必须执行3个简单的步骤才能实现(* 在编写此答案时 *):
transform: {}
,确保不会转换掉import
语句--experimental-vm-modules
标志运行node@^12.16.0 || >=13.2.0
jest-environment-node
或jest-environment-jsdom-sixteen
运行测试。所以你的jest配置文件应该至少包含以下内容:
要设置
--experimental-vm-modules
标记,您必须从package.json
运行Jest,如下所示(* 我希望将来会改变这种情况 *):我希望这个回答对你有帮助。
jrcvhitl2#
请注意,这仍然是实验性的,但我们 * 已经 * 记录了如何测试它,所以希望有较少的混乱。
https://jestjs.io/docs/en/ecmascript-modules
https://stackoverflow.com/a/61653104/1850276中的步骤正确
iqxoj9l93#
我遵循了已接受答案中提供的提示,但为了jest能正常工作,我在
package.json
中添加了属性"type": "module"
。在
package.json
中:unftdfkk4#
要在VSCode中使用“--experimental-vm-modules”标志从“jest”扩展运行jest,请将此配置放入全局或工作区设置.json中:
watbbzwu5#
除了@Radovan Kuka的答案之外,下面是如何使用
npx
运行带有ES模块的Jest:好处是不需要提供绝对的
node_modules
路径。3okqufwl6#
没有Babel,这里有一个完整的、最小的例子,可以在最近的Jest版本上运行。
package.json
:src/foo.js
:__tests__/foo.spec.js
:秘诀在于
package.json
:"type": "module"
和NODE_OPTIONS=--experimental-vm-modules jest
。如果你想添加一个模拟,那就有点复杂了,参见this answer。