当前位置: 首页 > 知识库问答 >
问题:

Jest未分析es6:SyntaxError:意外的令牌导入

鲁文昌
2023-03-14

我正在尝试用我的网页包项目设置Jest。当我运行测试时,Jest抱怨它无法读取es6代码。巴贝尔似乎没有转换我的测试文件。

我尝试过在互联网上找到的各种解决方案,但我仍然感到困惑。也许有人有更多的巴别塔/网页包知识,可以看看我的配置,帮助我。

相关package.json脚本:

{
    "test": "jest --no-cache --config config/jest.config.js"
}

有关package.json:

"@babel/core": "^7.2.2",
"@babel/plugin-proposal-class-properties": "^7.3.0",
"@babel/preset-env": "^7.3.1",
"@babel/preset-flow": "^7.0.0",
"@babel/preset-react": "^7.0.0",
"babel-eslint": "^10.0.1",
"babel-jest": "^24.0.0",
"babel-loader": "^8.0.5",
"babel-plugin-styled-components": "^1.10.0",
"jest": "^24.0.0",
"webpack": "^4.29.0",
"webpack-cli": "^3.2.1",
"webpack-dev-server": "^3.1.14"

配置/webpack.config.js:

entry: './src/index.js',
mode: isProduction ? 'production' : 'development',
devtool: isProduction ? 'none' : 'inline-source-map',
bail: true,
devServer: {
  contentBase: 'build',
  compress: true,
  port: 3000,
},
output: {
  path: path.resolve(__dirname, 'build'),
  filename: '[name].[chunkhash].js',
},
module: {
  rules: [
    {
      test: /\.js$/,
      exclude: /node_modules/,
      use: {
        loader: 'babel-loader',
        options: {
          cacheDirectory: true,
          presets: [
            '@babel/preset-env',
            '@babel/preset-react',
            '@babel/preset-flow',
          ],
          plugins: [
            'babel-plugin-styled-components',
            '@babel/plugin-proposal-class-properties',
          ],
        },
      },
    },
  ],
},
plugins: [
  new HtmlWebpackPlugin({
    template: 'src/index.html',
  }),
  new webpack.DefinePlugin({
    'process.env': JSON.stringify(process.env),
  }),
],

config/jest.config.js

module.exports = {
  verbose: true,
  rootDir: '../',
  setupFiles: ['./config/jest.setup.js'],
  transform: {
    '^.+\\.js?$': 'babel-jest',
  },

config/jest.setup.js

import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';

Enzyme.configure({ adapter: new Adapter() });

笑话错误:●测试套件未能运行

Jest encountered an unexpected token

This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain JavaScript.

...

Details:

/<...projectpath>/config/jest.setup.js:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import Enzyme from 'enzyme';
                                                                                         ^^^^^^

SyntaxError: Unexpected token import

我想要一个工作的测试员!我猜我的转变:巴别塔笑话在我的jest.config.js.无所事事...

共有3个答案

慕永年
2023-03-14

我遇到了类似的情况,我想用jest测试React组件.js文件,但失败了,因为该组件导入了.css样式表。我用的是Babel和Webpack。

根据公认的答案@sdgluck,我必须添加一个babel.config.js

1.

module.exports = {
    presets: ['@babel/preset-env', '@babel/preset-react']
};

2.我还安装Babel-jest作为dev依赖项

3.然后我通读了jest的网页指南

4.这让我在我的package.json中添加了一个“jest”属性,它模拟文件和样式表:

"jest": {
    "moduleNameMapper": {
      "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__mocks__/fileMock.js",
      "\\.(css|less)$": "<rootDir>/__mocks__/styleMock.js"
    }
  }

5.然后我必须在指定的路径上创建模拟文件(你可以使用任何你想要的路径,那些只是从他们的文档):

// __mocks__/styleMock.js

module.exports = {};
// __mocks__/fileMock.js

module.exports = 'test-file-stub';

然后它成功了:)

澹台景山
2023-03-14

我有一些有用的信息,可以作为以后看到这个问题的人的参考。

默认情况下,jest配置中的transformIgnorePatterns是["/node_modules/", "\.pnp\。[^\/] $"]

如果一些人的问题是由node_modules中的一些代码引起的,并且没有覆盖这个值,Babel-jest仍然不起作用。

可能是这样的正确值“/node_modules/(?!(您的第三部分es模块代码|其他es库))”

聂和宜
2023-03-14

你需要做两件事:

>

这是必要的,因为babeljest依赖于传统的babel配置文件,而不是webpack。从版本7开始,Babel就支持JS配置为Babel.config.JS

当使用JS Babel配置时(例如,与.babelrc相反),Jest还编译节点中的模块。按照惯例,这必须在项目的根目录中,与jest配置文件一起。

下面是一个基于Babel选项的配置,在您的webpack.config.js文件中:

// babel.config.js
module.exports = {
  presets: [
    '@babel/preset-env',
    '@babel/preset-react',
    '@babel/preset-flow',
  ],
  plugins: [
    'babel-plugin-styled-components',
    '@babel/plugin-proposal-class-properties',
  ]
}

安装Babel-core桥版本:

npm install babel-core@7.0.0-bridge.0 --save-dev

从github.com/babel/babel-bridge:

这个repo包含了我们称之为“桥接”的包,旨在简化使用“babel core”作为babel 6对等依赖项的库的转换。

Babel7向scopes过渡的问题是,如果一个包依赖于Babel6,那么他们可能希望在添加对Babel7的支持的同时添加对它的支持。因为巴别塔7将以@Babel/core而不是Babel-core的形式发布,所以维护人员无法在不进行突破性更改的情况下完成该转换。例如

 类似资料:
  • 我已经为连接的组件创建了测试。在一个文件中,我导入位于项目根文件夹外部的“本地化”模块。它没有被编译到ES5,Jest报告了同步错误:意外令牌导出。如何强制Jest转换该文件? 我有。带环境预设的巴别LRC。 package.json

  • 问题内容: 我不明白怎么了。节点v5.6.0 NPM v3.10.6 代码: 错误: 问题答案: 更新3: 从Node 13开始 ,您可以使用.mjs扩展名,也可以在package.json中设置“ type”:“ module”。你 并不 需要使用标志。 更新2: 从Node 12开始 ,您可以使用扩展名,也可以在package.json中进行设置。并且您需要运行带有标志的节点。 更新: 在节点

  • 我不明白怎么了。节点V5.6.0 NPM V3.10.6 代码: 错误:

  • 在设置Javascript Dev环境时,我遇到了以下错误。 我想使用代替。 我用了巴别塔。 我从以下方法尝试了许多解决方案,但是,不起作用或我。 节点错误:语法错误:意外的令牌导入 Node.js -语法错误:意外的标记导入 srcServer.js 。巴伯尔克

  • 我正在学习反应,我想测试我的一个组件,但我坚持这个错误: 以下是我在阅读stackoverflow和github上的帖子时尝试过的一些东西 添加了测试预设和这些插件“变换-es2015-moids-Common js”、动态导入节点”到我的babel配置 在我的包裹里。json Jest属性具有以下设置: 我的实际组件是用ES6和typescript构建的,如果这对您有帮助的话:) 从我所读到的内

  • 问题内容: 我不明白怎么了。节点v5.6.0 NPM v3.10.6 编码: 错误: 问题答案: 更新3:从Node 13开始,你可以使用扩展名,也可以在中设置。你并不需要使用–标志。 更新2:从Node 12开始,你可以使用扩展名,也可以在中进行设置。并且你需要运行带有–experimental-modules标志的节点。 更新:在节点9中,它在标志后面启用,并使用扩展名。 虽然确实是ES6的一