我使用的jest:24.9.0
没有任何配置,是从create-react-app全局安装的。在这些文件中,我正在使用es6模块。使用"test": "react-scripts test"
但是,当我将jest
与"test": "jest --config jest.config.js",
结合使用时,会看到以下错误。
FAIL src/configuration/notifications.test.js
● Test suite failed to run
/var/www/management/node/src/configuration/notifications.test.js:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import notifications from './notifications';
^^^^^^
SyntaxError: Cannot use import statement outside a module
答案 0 :(得分:2)
Jest不支持ES6
模块,因此当您直接使用Jest运行测试时会抛出此错误。如果要这样运行,则必须添加babel。
另一方面,当您使用react-scripts
运行测试时,它会在后台使用babel来转换代码。
在最新版本的jest中,babel-jest现在由Jest自动加载并完全集成
希望这个回答您的问题。
在玩笑中添加通天塔。
安装
babel-jest
现在由Jest自动加载并完全集成。仅当您使用babel-jest转换TypeScript文件时,才需要执行此步骤。
npm install --save-dev babel-jest
用法
在package.json文件中进行以下更改:
{
"scripts": {
"test": "jest"
},
"jest": {
"transform": {
"^.+\\.[t|j]sx?$": "babel-jest"
}
}
}
创建.babelrc配置文件
在项目根目录中创建一个babel.config.json
配置并启用一些presets
。
首先,您可以使用env预设,该预设可启用ES2015 +的转换
npm install @babel/preset-env --save-dev
要启用预设,您必须在babel.config.json
文件中对其进行定义,如下所示:
{
"presets": ["@babel/preset-env"]
}
查看有关Babel official site的更多详细信息
答案 1 :(得分:0)
由于jest无法与esmodule良好配合,因此您需要在jest.config.js中添加这些配置,以告知Jest改用commonJS构建
moduleNameMapper : {
'^react-dnd$': 'react-dnd/dist/cjs',
'^react-dnd-html5-backend$': 'react-dnd-html5-backend/dist/cjs',
'^dnd-core$': 'dnd-core/dist/cjs',
}