Jest - SyntaxError: 不能在模块外使用 import 语句

Jam*_*ber 13 javascript reactjs jestjs create-react-app

我在jest:24.9.0没有任何配置的情况下使用,从 create-react-app 全局安装。在这些文件中,我使用了 es6 模块。使用时没有错误"test": "react-scripts test"

但是,当我开始使用jestwith 时,"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
Run Code Online (Sandbox Code Playgroud)

pau*_*wen 20

正如上面的答案所描述的,Jest 不支持 ES6 模块。因此,我们需要将代码转换为支持的模块类型。我们可以使用babel-jestts-jestts-jest为了简单起见,我建议使用。

第一步:安装:

npm i -D ts-jest @types/jest或者yarn add --dev ts-jest @types/jest

第2步:配置

选项 1:创建 jest 配置文件jest.config.js

module.exports = {
    transform: {
        '^.+\\.(ts|tsx)$': 'ts-jest',
    },
};
Run Code Online (Sandbox Code Playgroud)

选项 2:添加 jest 配置到package.json

"jest": {
    "transform": {
        "^.+\\.(ts|tsx)$": "ts-jest"
    }
}
Run Code Online (Sandbox Code Playgroud)

第 3 步:执行脚本。现在一切都应该准备好了。

  • OP 并没有尝试让它适用于打字稿 (2认同)

Soh*_*raf 9

Jest 不支持ES6模块,因此当您直接使用 Jest 运行测试时会抛出此错误。如果你想这样运行,那么你必须添加 babel。

另一方面,当您使用react-scripts它运行测试时,会在幕后使用 babel 来转换代码。

在较新版本的 jest 中,babel-jest 现在由 Jest 自动加载并完全集成

希望这能回答你的问题。

开玩笑地添加 babel。

安装

babel-jest现在由 Jest 自动加载并完全集成。仅当您使用 babel-jest 转换 TypeScript 文件时才需要此步骤。

npm install --save-dev babel-jest
Run Code Online (Sandbox Code Playgroud)

用法

在您的 package.json 文件中进行以下更改:

{
  "scripts": {
    "test": "jest"
  },
  "jest": {
    "transform": {
      "^.+\\.[t|j]sx?$": "babel-jest"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

创建 .babelrc 配置文件

babel.config.json在您的项目根目录中创建一个配置并启用一些presets.

首先,您可以使用 env 预设,它为 ES2015+ 启用转换

npm install @babel/preset-env --save-dev
Run Code Online (Sandbox Code Playgroud)

为了启用预设,您必须在babel.config.json 文件中定义它,如下所示:

{
  "presets": ["@babel/preset-env"]
}
Run Code Online (Sandbox Code Playgroud)

Babel 官方网站上查看更多详细信息

  • 如何“添加巴别塔”? (3认同)