Jestjs Jest给出了一个错误:“quot;SyntaxError:意外的令牌导出“;
我正在使用Jest测试我的React应用程序 最近,我添加到我的应用程序。我的测试失败,出现以下错误: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
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中的jesttransformIgnorePatterns
。
"env": {
"test": {
"plugins": ["transform-es2015-modules-commonjs"]
}
}