Jestjs Jest给出了一个错误:“quot;SyntaxError:意外的令牌导出“;

Jestjs Jest给出了一个错误:“quot;SyntaxError:意外的令牌导出“;,jestjs,Jestjs,我正在使用Jest测试我的React应用程序 最近,我添加到我的应用程序。我的测试失败,出现以下错误: Test suite failed to run /my_project/node_modules/deck.gl/src/react/index.js:21 export {default as DeckGL} from './deckgl'; ^^^^^^ SyntaxError: Unexpected token export at ScriptTransformer._tra

我正在使用Jest测试我的React应用程序

最近,我添加到我的应用程序。我的测试失败,出现以下错误:

Test suite failed to run

/my_project/node_modules/deck.gl/src/react/index.js:21
export {default as DeckGL} from './deckgl';
^^^^^^

SyntaxError: Unexpected token export

  at ScriptTransformer._transformAndBuildScript (node_modules/jest-runtime/build/script_transformer.js:318:17)
  at Object.<anonymous> (node_modules/deck.gl/dist/react/deckgl.js:9:14)
  at Object.<anonymous> (node_modules/deck.gl/dist/react/index.js:7:15)
以下是我的笑话设置:

"jest": {
    "testURL": "http://localhost",
    "setupFiles": [
      "./test/jestsetup.js"
    ],
    "snapshotSerializers": [
      "<rootDir>/node_modules/enzyme-to-json/serializer"
    ],
    "moduleDirectories": [
      "node_modules",
      "/src"
    ],
    "moduleNameMapper": {
      "\\.(css|scss)$": "<rootDir>/test/EmptyModule.js"
    }
  },
“开玩笑”:{
“testURL”:”http://localhost",
“设置文件”:[
“/test/jestsetup.js”
],
“快照序列化程序”:[
“/node_modules/enzyme到json/serializer”
],
“模块目录”:[
“节点_模块”,
“/src”
],
“moduleNameMapper”:{
“\\(css | scss)$”:“/test/EmptyModule.js”
}
},

我似乎具备了转换
导出{defaultasdeckgl}
所需的正确功能。有什么想法吗?出了什么问题

默认情况下,Jest不会编译
node\u modules
目录中的文件

[阵列]

默认值:[“/node\u modules/”]

与所有源匹配的regexp模式字符串数组 转换前的文件路径。如果测试路径与任何 模式,它将不会被转换。默认值:[“/node\u modules/”]

DeckGL似乎在ES6中,为了让jest能够阅读它,您还需要编译它。
为此,只需在
transformignorePatterns

"transformIgnorePatterns": ["/node_modules/(?!deck\.gl)"]

这意味着文件不会通过TypeScript编译器进行转换,例如,因为它是一个具有TS语法的JS文件,或者它作为未编译的源文件发布到npm。这是你能做的

调整您的
transformIgnorePatterns
允许列表:

{
“笑话”:{
“transformIgnorePatterns”:[
“节点模块/(?!@ngrx |)(?!deck.gl)| ng动态)”
]
}

}
这是因为Node.js无法处理ES6模块

因此,您应该将模块转换为CommonJS

如果您使用Babel 7=>

安装
npm安装——保存dev@babel/plugin转换模块commonjs

并且仅用于添加到.babelrc的测试用例, Jest自动给出NODE_ENV=test全局变量

"env": {
    "test": {
      "plugins": ["@babel/plugin-transform-modules-commonjs"]
    }
}
或者如果您使用Babel 6=>

npm安装——保存dev babel-plugin-transform-es2015-modules-commonjs

致巴别塔铁路公司

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

如果您使用的是“create react app”,它将不允许您通过package.json中的Jest属性指定“transformIgnorePatterns”

照此

您可以在package.json中使用CLI进行覆盖,如下所示:

“脚本”:{
“测试”:“反应脚本测试——transformIgnorePatterns\”节点\模块/(?!您的模块名称)/\”,
},

我在monorepo上遇到了这个问题。根节点模块中的一个包破坏了我的测试。我通过将本地
.babelrc
文件更改为
babel.config.js
进行了修复。说明:

您忘记在导出上方的行中添加分号了吗?@DonP,您可以尝试使用推荐的分号,看看是否有帮助吗?如果这个问题不能帮你解决这个问题,我不想用另一个答案来挤这个问题!但是,确保在它开始工作之前运行
jest--clearCache
我必须这样做。我在哪里添加:“env”:{“test”:{“plugins”:[“@babel/plugin transform modules commonjs”]}@joecarcenter到您的
.babelrc
或您可能正在使用的其他babeel配置文件,例如
babel.config.js
。如果您还没有,您可以在项目根目录中创建名为
.babelrc
的新文件,并将其添加到根目录下
{}
-tags。在运行测试时必须将此答案与@Ria Anggraini的答案结合起来才能使事情正常运行。在运行测试时必须将此答案与@Jimi Pajala的答案结合起来才能使事情正常运行。在正则表达式中嵌套的否定前瞻
(?!…(!)
的原因是什么?我把它放在哪里?哪个文件?@EladKatz我是新手,但我认为这个块是针对package.json的,如果没有“jest”包装器,您可以将它放在jest.config.js.CRA中,以支持package.json中的jest
transformIgnorePatterns
"env": {
    "test": {
      "plugins": ["transform-es2015-modules-commonjs"]
    }
}