首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jest支持ES6导入/导出吗?

Jest支持ES6导入/导出吗?
EN

Stack Overflow用户
提问于 2016-03-02 19:33:58
回答 10查看 110.3K关注 0票数 164

如果我使用来自import/export的ES6,那么我所有的Jest测试都会出错:

意外保留字

我将被测试的对象转换为使用旧的生平语法,突然我的测试通过了。或者,以一个更简单的测试案例为例:

代码语言:javascript
复制
   var Validation = require('../src/components/validation/validation'); // PASS
   //import * as Validation from '../src/components/validation/validation' // FAIL

同样的错误。很明显,这里的进出口有问题。对于我来说,用ES5语法重写代码并不实用,只是为了让我的测试框架快乐。

我有巴别-杰斯特。我尝试了来自GitHub问题的各种GitHub。还没走远呢。

文件package.json

代码语言:javascript
复制
 "scripts": {
    "start": "webpack-dev-server",
    "test": "jest"
  },
      "jest": {
        "testPathDirs": [
          "__tests__"
        ],
        "testPathIgnorePatterns": [
          "/node_modules/"
        ],
        "testFileExtensions": ["es6", "js"],
        "moduleFileExtensions": ["js", "json", "es6"]
      },

档案babelrc

代码语言:javascript
复制
{
  "presets": ["es2015", "react"],
  "plugins": ["transform-decorators-legacy"]
}

有解决办法吗?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2020-05-07 08:03:54

更新2020 -对ECMAScript模块的本地支持

根据本期的说法,jest@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配置文件至少应该包含以下内容:

代码语言:javascript
复制
export default {
    testEnvironment: 'jest-environment-node',
    transform: {}
    ...
};

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

代码语言:javascript
复制
node --experimental-vm-modules node_modules/jest/bin/jest.js

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

代码语言:javascript
复制
import {jest} from '@jest/globals'

(我希望这种情况将来会有所改变)

票数 103
EN

Stack Overflow用户

发布于 2018-09-07 14:12:01

我的回答 到另一个问题,这可以更简单:

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

步骤1:

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

代码语言:javascript
复制
{
  "env": {
    "test": {
      "plugins": ["@babel/plugin-transform-modules-commonjs"]
    }
  }
}

步骤2:

安装ECMAScript 6转换插件:

代码语言:javascript
复制
npm install --save-dev @babel/plugin-transform-modules-commonjs

就是这样。 Jest将自动从ECMAScript模块编译到CommonJS,而不必通知package.json中的jest属性的其他选项。

票数 163
EN

Stack Overflow用户

发布于 2020-01-13 14:08:33

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

选择笑话,然后快乐:

作为参考,当前配置:

代码语言:javascript
复制
npm install --save-dev babel-jest

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

代码语言:javascript
复制
{
  "scripts": {
    "test": "jest"
  },
  "jest": {
    "transform": {
      "^.+\\.jsx?$": "babel-jest"
    }
  }
}

安装babel预置:

代码语言:javascript
复制
npm install @babel/preset-env --save-dev

创建一个.babelrc文件:

代码语言:javascript
复制
{
  "presets": ["@babel/preset-env"]
}

运行您的测试:

代码语言:javascript
复制
npm run test
票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35756479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档