Jest是否支持ES6导入/导出?

时间:2016-03-02 19:33:59

标签: ecmascript-6 jestjs babel-jest

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

  

意外的保留字

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

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

同样的错误。显然这里的导入/导出存在问题。使用ES5语法重写我的代码只是为了让我的测试框架感到高兴,这对我来说是不切实际的。

我有巴贝尔开玩笑。我从github问题尝试了各种suggestions。不行。到目前为止。

的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"]
}

这是否有解决方法?

9 个答案:

答案 0 :(得分:33)

UPDATE 2020-ECMAScript模块(ESM)的本机支持


根据this issuejest@25.4.0对ESM有原生支持。因此,您不再需要使用babel。在撰写此答案(05/2020)时,要激活该功能,您需要做三件事:

  • 通过在配置文件中设置import,确保您不会变换transform: {}语句
  • 使用node@^12.16.0 || >=13.2.0标志运行--experimental-vm-modules
  • 使用jest-environment-nodejest-environment-jsdom-sixteen运行测试。

因此您的Jest配置文件应至少包含以下内容:

export default {
    testEnvironment: 'jest-environment-node',
    transform: {}
    ...
};

要设置--experimental-vm-modules标志,您将必须按以下方式运行Jest:

node --experimental-vm-modules node_modules/jest/bin/jest.js

还请注意Github问题,该方法尚不支持jest对象。因此,您可能需要手动导入它:

import {jest} from '@jest/globals'

我希望以后会改变

答案 1 :(得分:12)

my answer到另一个问题,这可能更简单:


唯一的要求是将您的test环境配置为Babel,并添加es2015转换插件:


第1步:

将您的test环境添加到项目根目录中的.babelrc

{
  "env": {
    "test": {
      "plugins": ["transform-es2015-modules-commonjs"]
    }
  }
}

第2步:

安装es2015转换插件:

npm install --save-dev babel-plugin-transform-es2015-modules-commonjs

就是这样。 Jest将自动启用从ES模块到CommonJS的编译,而无需向jest中的package.json属性通知其他选项。

答案 2 :(得分:4)

这是在你的.babelrc文件中添加stage-0的问题。这是一个例子:

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

答案 3 :(得分:3)

对于更新的配置,我使用的是https://babeljs.io/setup#installation

选择JEST并开心:

作为参考,当前配置:

npm install --save-dev babel-jest

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

{
  "scripts": {
    "test": "jest"
  },
  "jest": {
    "transform": {
      "^.+\\.jsx?$": "babel-jest"
    }
  }
}

安装babel预设:

npm install @babel/preset-env --save-dev

创建一个.babelrc文件:

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

运行测试:

npm run test

答案 4 :(得分:1)

我遇到了同样的问题。

这些是我所做的 yarn add --dev babel-jest @babel/core @babel/preset-env

在rootDir中制作jest.config.js

module.exports = {
    moduleFileExtensions: ["js", "json", "jsx", "ts", "tsx", "json"],
    transform: {
        '^.+\\.(js|jsx)?$': 'babel-jest'
    },
    testEnvironment: 'node',
    moduleNameMapper: {
        '^@/(.*)$': '<rootDir>/$1'
    },
    testMatch: [
        '<rootDir>/**/*.test.(js|jsx|ts|tsx)', '<rootDir>/(tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx))'
    ],
    transformIgnorePatterns: ['<rootDir>/node_modules/']
};

然后在rootDir中创建babal.config.js。 像这样去

module.exports = {
    "presets": ["@babel/preset-env"]
}

答案 5 :(得分:0)

除了安装babel-jest(现在默认带有jest),请务必安装regenerator-runtime

答案 6 :(得分:0)

要添加对 React 和 react-testing-library 的支持,弹出 CreateReactApp 并从 package.json 获取所有需要的 Jest 配置可能会很有用。它已准备好与另一个捆绑器一起使用,在我的情况下是 Rollup。

答案 7 :(得分:0)

package.json中,请像这样设置:"test": "node --experimental-vm-modules node_modules/.bin/jest"

应该不错!

答案 8 :(得分:-3)

我用.default解决了这个问题。

尝试 var Validation = require('../src/components/validation/validation').default;