开玩笑的 transformIgnorePatterns 不起作用
Posted
技术标签:
【中文标题】开玩笑的 transformIgnorePatterns 不起作用【英文标题】:Jest transformIgnorePatterns not working 【发布时间】:2018-10-13 08:19:34 【问题描述】:我花了很长时间查看有关此的其他问题并查看 Github 上的其他项目,但似乎没有一个答案对我有用。
我在我的项目中加载第三方库,运行 Jest 测试时出现错误
export default portalCommunication;
^^^^^^
SyntaxError: Unexpected token export
> 1 | import portalCommunication from 'mathletics-portal-communication-service';
我已尝试以多种方式更新我的 Jest 配置以使其转译此库,但我总是遇到相同的错误。
这是我当前的 jest.config.js 文件:
module.exports =
moduleNameMapper:
'\\.(css|scss)$': 'identity-obj-proxy',
'\\.svg$': '<rootDir>/test/mocks/svg-mock.js'
,
setupFiles: ['./test/test-setup.js'],
transformIgnorePatterns: [
'<rootDir>/node_modules/(?!mathletics-portal-communication-service)'
]
;
我还尝试添加转换属性以针对这个 mathletics-portal-communication-service 目录运行 babel-jest。
请帮忙!
【问题讨论】:
你可能需要配置 babel。 我的项目设置了 babel 并且工作正常,我需要为 Jest 做些什么特别的事情吗?我以为它会自动使用 babel-jest? 【参考方案1】:在我将 .babelrc 更改为 babel.config.js 之前,transformIgnorePatterns 对我不起作用,如下所示:
module.exports =
"presets": [
"@babel/preset-env"
]
;
在此评论中看到:https://github.com/facebook/jest/issues/6229#issuecomment-403539460
【讨论】:
您知道.babelrc
或babel.config.js
文件是否绝对必要?我正试图让我的 transformIgnorePatterns
在我的 package.json
声明中工作
看链接的github问题,好像在package.json里也行不通,不过我没试过。
这个回复被低估了!!在我看到这个之前,我已经撞了几个小时了!哎呀,这应该在文档中!
奇怪的是 .babelrc 不起作用,而 babel.config,js 起作用。
谢谢你,你节省了我的时间!【参考方案2】:
目前,作为一种解决方法,我已将配置更改为使用moduleNameMapper
选项来为该库加载模拟类。我更愿意使用transformIgnorePatterns
,所以仍然会感谢任何想法。
新配置:
module.exports =
moduleNameMapper:
'\\.(css|scss)$': 'identity-obj-proxy',
'\\.svg$': '<rootDir>/test/mocks/svg-mock.js',
'mathletics-portal-communication-service': '<rootDir>/test/mocks/mathletics-portal-communication-service-mock.js'
,
setupFiles: ['./test/test-setup.js']
;
【讨论】:
【参考方案3】:添加斜杠可以帮我解决这个问题:
// ...
transformIgnorePatterns: [
'<rootDir>/node_modules/(?!mathletics-portal-communication-service/)'
]
;
【讨论】:
【参考方案4】:我组织的另一个团队添加了一些通用模块。这没有被转译,所以问题。
我关注了这个:https://babeljs.io/docs/en/configuration#whats-your-use-case
-
将我的
.babelrc
转换为babel.config.json
在开玩笑的配置中添加了这个:
transformIgnorePatterns: ['/node_modules/(?!(@companyName)/).*/'],
这解决了我的问题。
【讨论】:
【参考方案5】:可能是您使用了rootDir
。试试:
"transformIgnorePatterns": [
"node_modules/(?!(mathletics-portal-communication-service))"
]
【讨论】:
以上是关于开玩笑的 transformIgnorePatterns 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
开玩笑测试中 UnhandledPromiseRejectionWarning 的含义是啥?