Jest支持ES6的import/export吗?

185

如果我在ES6中使用import/export,则我的所有Jest测试都会失败,并显示错误:

意外的保留字

当我将要测试的对象转换为旧式的IIFE语法时,突然我的测试通过了。或者,采用更简单的测试用例:

   var Validation = require('../src/components/validation/validation'); // PASS
   //import * as Validation from '../src/components/validation/validation' // FAIL

同样的错误。显然这里存在着导入/导出问题。为了让我的测试框架正常工作,重写我的代码使用 ES5 语法是不现实的。

我有 babel-jest。我尝试了来自 GitHub 问题页面的各种 建议,但到目前为止都无法解决问题。

文件package.json

 "scripts": {
    "start": "webpack-dev-server",
    "test": "jest"
  },
      "jest": {
        "testPathDirs": [
          "__tests__"
        ],
        "testPathIgnorePatterns": [
          "/node_modules/"
        ],
        "testFileExtensions": ["es6", "js"],
        "moduleFileExtensions": ["js", "json", "es6"]
      },

文件 babelrc

{
  "presets": ["es2015", "react"],
  "plugins": ["transform-decorators-legacy"]
}

有没有解决方法?


这个链接有帮助吗? - user3854359
1
@GeorgePompidou - 可能吧。我不确定这个解决方案是否适用于babel-jest。 - P.Brian.Mackey
这只是一个指定类似 "presets": ["es2015"] 的事情,可以在 package.json 或者 .babelrc 文件中完成。毕竟你正在使用 babel。 - user3854359
这个问题在这里有人通过安装babel-preset-es2015和babel-preset-react包解决了。如果我没有提供太多帮助,很抱歉--我没有遇到过这个问题。 - user3854359
5
这个问题是5年前的,然而jest对ES模块的支持仍然是实验性的。 - aderchox
显示剩余4条评论
13个回答

0

除了安装默认已经包含在 Jest 中的 babel-jest 之外,还要确保安装 regenerator-runtime


1
如果我使用像这样的babel配置来配置jest {presets: [['@babel/preset-env', {targets: {node: 'current'}}]]};,那么就不需要regenerator runtime(如果没有node:'current'部分,则会发出警告)。请参见https://jestjs.io/docs/getting-started#using-babel。 - Colin D

0
要解决这个问题,你需要在package.json文件中添加。
"type": "module",

package.json上设置test属性。
"test": "node --experimental-vm-modules node_modules/.bin/jest"

在我的电脑上,它适用于 Node 版本 v16.19.0。 参考 - kevinhooke


0
要解决这个问题,你需要配置Jest来正确处理ES6模块。你可以通过使用Babel来转译你的代码,以便Node.js能够理解ES6语法。
npm install --save-dev @babel/core @babel/preset-env babel-jest

.babelrc

{
  "presets": ["@babel/preset-env"]
}

jest.config.js

module.exports = {
    testEnvironment: 'node',
    setupFilesAfterEnv: ['./jest.setup.js'],
    clearMocks: true,
    roots: ['./test'],
    testMatch: ['**/*.test.js'],
    transform: {
        '^.+\\.js$': 'babel-jest',
    },
    moduleNameMapper: {
        '^src/(.*)$': './src/$1',
        '^test/(.*)$': './test/$1',
    },
    .
    .
    .
    .
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接