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

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

孟华晖
2023-03-14

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

意外保留字

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

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

同样的错误。显然这里的导入/导出有问题。对我来说,仅仅为了让我的测试框架开心而使用ES5语法重写代码是不现实的。

我有巴别塔笑话。我尝试了GitHub问题的各种建议。这是不可能的。

 "scripts": {
    "start": "webpack-dev-server",
    "test": "jest"
  },
      "jest": {
        "testPathDirs": [
          "__tests__"
        ],
        "testPathIgnorePatterns": [
          "/node_modules/"
        ],
        "testFileExtensions": ["es6", "js"],
        "moduleFileExtensions": ["js", "json", "es6"]
      },
{
  "presets": ["es2015", "react"],
  "plugins": ["transform-decorators-legacy"]
}

有解决办法吗?

共有3个答案

窦宏旷
2023-03-14

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

选择玩笑和快乐:

作为参考,当前配置:

npm install --save-dev babel-jest

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

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

安装巴别塔预设:

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

创建一个. babelrc文件:

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

运行测试:

npm run test
杨超
2023-03-14

根据这个问题,有来自jest@25.4.0。这样你就不用再使用巴贝尔了。在撰写此答案(2020年5月)时,要激活此功能,您需要做三件简单的事情:

  • 通过在配置文件
  • 中设置 转换:{},确保您不会转换掉 导入语句
  • 运行节点@^12.16.0||

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

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

要设置<代码>--实验性vm模块标志,您必须运行Jest,如下所示:

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

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

import {jest} from '@jest/globals'

(我希望这将在未来发生变化)

袁卓
2023-03-14

从我对另一个问题的回答来看,这可以更简单:

唯一的要求是将测试环境配置到Babel,并添加ECMAScript

步骤1:

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

{
  "env": {
    "test": {
      "plugins": ["@babel/plugin-transform-modules-commonjs"]
    }
  }
}

第二步:

安装ECMAScript

npm install --save-dev @babel/plugin-transform-modules-commonjs

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

 类似资料:
  • 问题内容: 我一直在整个互联网上寻找答案,但没有明确的答案。 当前,NodeJS仅使用CommonJS语法加载模块,如果您确实要使用标准的ES2015模块语法,则必须事先对其进行转换,或者在运行时使用外部模块加载器。 目前,我不太愿意使用这两种方法,NodeJS维护人员是否计划支持ES2015模块?我完全没有发现任何提示。 目前,NodeJS 6.x声称支持96%的ES2015功能,但没有任何模块

  • 我在网上到处找都找不到一个明确的答案。 当前Node.js仅使用CommonJS语法来加载模块,如果您真的想使用标准的ECMAScript 2015模块语法,那么您要么必须事先传输它,要么在运行时使用外部模块加载器。 目前,我不太愿意使用这两种方法中的任何一种,Node.js的维护人员是否计划支持ECMAScript2015模块?关于这一点,我根本没有找到任何提示。 目前,Node.js6.x声称

  • 问题内容: 我开始认为这是不可能的,但是无论如何我都想问。 我想测试我的一个ES6模块以特定方式调用另一个ES6模块。有了茉莉花,这非常容易- 应用程式码: 和测试代码: 笑话相当于什么?我觉得这是一件很想做的简单的事,但是我一直在努力尝试弄清头发。 我最接近的是将s 替换为s,并将其移入测试/函数中。都不是我想做的事情。 为了获得加分,我希望在其中的功能为默认导出时使整个工作正常进行。但是,我知

  • 我正在尝试用我的网页包项目设置Jest。当我运行测试时,Jest抱怨它无法读取es6代码。巴贝尔似乎没有转换我的测试文件。 我尝试过在互联网上找到的各种解决方案,但我仍然感到困惑。也许有人有更多的巴别塔/网页包知识,可以看看我的配置,帮助我。 相关package.json脚本: 有关package.json: 配置/webpack.config.js: config/jest.config.js

  • 问题内容: 我目前正在玩React Native。我正在尝试构建我的应用程序,但是它开始变得杂乱无章。 现在,在我的能力范围内,我可以轻松做到: 但是,当我开始创建更多具有更深目录结构的组件时,它开始变得混乱: 我知道首选的解决方案是为事情创建私有npm模块,但这对于一个小型项目来说是过大的。 您可以在浏览器上执行类型解决方案,但是如何通过导入实现呢? 问题答案: React也有同样的问题。因此,

  • 是否有人使用es2015语法编写jasmine/jest测试?需要多少填隙/填充胶/选区划分? 我无法正确导入函数。我有一个模块:../utils/TweetUtils.js 和一个测试套件: ../../\uuuuu测试\uuuu/TweetUtils-test.js 如果我用这样的东西将控制台输出破解到套件中: