Jest:无法在模块外部使用import语句

Jest:无法在模块外部使用import语句,import,module,jestjs,Import,Module,Jestjs,我在使用Jest运行测试时出错,我试图修复此错误2小时。但是,我无法修复它。我的模块正在使用gapi脚本包,此包中出现错误。然而,我不知道为什么会发生这种情况,以及如何修复它 jest.config.js module.exports = { "collectCoverage": true, "rootDir": "./", "testRegex": "__tests__/.+\\.test\\.js", "transform": { '^.+\\.js?$': "bab

我在使用Jest运行测试时出错,我试图修复此错误2小时。但是,我无法修复它。我的模块正在使用
gapi脚本
包,此包中出现错误。然而,我不知道为什么会发生这种情况,以及如何修复它

jest.config.js

module.exports = {
  "collectCoverage": true,
  "rootDir": "./",
  "testRegex": "__tests__/.+\\.test\\.js",
  "transform": {
    '^.+\\.js?$': "babel-jest"
  },
  "moduleFileExtensions": ["js"],
  "moduleDirectories": [
    "node_modules",
    "lib"
  ]
}
module.exports = {
  presets: [
    '@babel/preset-env',
  ]
};
import methods, { typeToActions } from '../lib/methods';
import { gapi } from "gapi-script";
...
babel.config.js

module.exports = {
  "collectCoverage": true,
  "rootDir": "./",
  "testRegex": "__tests__/.+\\.test\\.js",
  "transform": {
    '^.+\\.js?$': "babel-jest"
  },
  "moduleFileExtensions": ["js"],
  "moduleDirectories": [
    "node_modules",
    "lib"
  ]
}
module.exports = {
  presets: [
    '@babel/preset-env',
  ]
};
import methods, { typeToActions } from '../lib/methods';
import { gapi } from "gapi-script";
...
methods.test.js

module.exports = {
  "collectCoverage": true,
  "rootDir": "./",
  "testRegex": "__tests__/.+\\.test\\.js",
  "transform": {
    '^.+\\.js?$': "babel-jest"
  },
  "moduleFileExtensions": ["js"],
  "moduleDirectories": [
    "node_modules",
    "lib"
  ]
}
module.exports = {
  presets: [
    '@babel/preset-env',
  ]
};
import methods, { typeToActions } from '../lib/methods';
import { gapi } from "gapi-script";
...
methods.js

module.exports = {
  "collectCoverage": true,
  "rootDir": "./",
  "testRegex": "__tests__/.+\\.test\\.js",
  "transform": {
    '^.+\\.js?$': "babel-jest"
  },
  "moduleFileExtensions": ["js"],
  "moduleDirectories": [
    "node_modules",
    "lib"
  ]
}
module.exports = {
  presets: [
    '@babel/preset-env',
  ]
};
import methods, { typeToActions } from '../lib/methods';
import { gapi } from "gapi-script";
...
错误消息

C:\haram\github\react youtube数据api\node\u modules\gapi script\index.js:1 ({“Object.”:函数(模块、导出、require、u dirname、u文件名、全局、jest){import {gapi,gapiComplete}来自“/gapiScript”

SyntaxError: Cannot use import statement outside a module

我的设置有什么问题?

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中添加“type”:“module”或使用其他答案中所述的mjs在您的设置不太复杂时是不必要的。

在撰写本文时,Jest正在为ES6模块提供支持。您可以在此处跟踪进度:

目前,您可以通过运行以下命令来消除此错误:

node --experimental-vm-modules node_modules/.bin/jest
而不是简单地:

jest

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

也许您可以阅读此处的注释。您是否也尝试在测试中导入该包?或者模拟gapi函数?我相信您必须模拟它。这太庞大了!我花了太长时间寻找此解决方案。所有测试都正常工作,然后我编写了一系列小时的代码,然后一切都失败了。找到了大量关于如何更新配置以使事情通过的文档-尝试了一段时间,失败了一段时间,然后找到了这个。