Jest:不能在模块外部使用import语句

mbjcgjjk  于 2022-12-08  发布在  Jest
关注(0)|答案(5)|浏览(292)

当我使用Jest运行测试时,我遇到了一个错误,我尝试了2个小时来修复这个错误。但是,我无法修复它。我的模块使用的是gapi-script包,错误发生在这个包中。但是,我不知道为什么会发生这个错误,以及如何修复它。

jest配置js

module.exports = {
  "collectCoverage": true,
  "rootDir": "./",
  "testRegex": "__tests__/.+\\.test\\.js",
  "transform": {
    '^.+\\.js?$': "babel-jest"
  },
  "moduleFileExtensions": ["js"],
  "moduleDirectories": [
    "node_modules",
    "lib"
  ]
}

巴别尔配置js

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

方法.测试.js

import methods, { typeToActions } from '../lib/methods';

方法.js**

import { gapi } from "gapi-script";
...

错误消息

如果您有任何问题,请联系我们。如果您有任何问题,请联系我们。

SyntaxError: Cannot use import statement outside a module

我的设置有什么问题?

bnl4lu3b

bnl4lu3b1#

在撰写本文时,Jest正在为ES6模块提供支持。您可以在此处跟踪进度:
https://jestjs.io/docs/en/ecmascript-modules
现在,您可以通过运行以下命令来消除此错误:

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

而不是简单地:

jest

请务必在使用此解决方案之前检查链接。

wd2eg0qa

wd2eg0qa2#

我用保罗·科吉对另一个问题的回答解决了这个问题--
Does Jest support ES6 import/export?
第一步:
将测试环境添加到项目根目录下的.babelrc中:

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

第二步:
安装ECMAScript 6转换插件:

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

vu8f3i0k3#

Jest需要babel来处理模块。对于单独的测试,您不需要jest.config.js,只需将测试文件命名为xxx.spec.js或xxx.test.js,或者将文件放在名为test的文件夹中。
我使用这个babel.config.js

module.exports = function (api) {
  api.cache(true)

  const presets = [
    "@babel/preset-env"
  ]

  return {
    presets
  }
}

添加“类型”:如果您的设置不太复杂,则不需要package.json中的“module”或使用其他答案中所述的mjs。

sycxhyv7

sycxhyv74#

我也遇到过同样的问题,通过添加以下命令行选项作为环境变量解决了这个问题。

export NODE_OPTIONS=--experimental-vm-modules npx jest    //linux

setx NODE_OPTIONS "--experimental-vm-modules npx jest"    //windows
mctunoxg

mctunoxg5#

将Jest(package.json)升级到29版(目前最新的版本)为我解决了这个问题。

相关问题