开玩笑-SyntaxError:无法在模块外部使用import语句

时间:2020-01-23 13:26:49

标签: javascript reactjs jestjs create-react-app

我使用的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

2 个答案:

答案 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',
}