我正试图让我的第一个笑话测试通过与React和巴别塔。
出现以下错误:
语法错误:/用户/manueldupont/测试/avid-sibelius-发布查看器/src/components/传输按钮/传输按钮。意外标记
> 7 | @import '../variables.css';
| ^
我的package.json配置看起来像这样:
"babel": {
"presets": [
"es2015",
"react"
],
"plugins": [
"syntax-class-properties",
"transform-class-properties"
]
},
"jest": {
"moduleNameMapper": {
"^image![a-zA-Z0-9$_-]+$": "GlobalImageStub",
"^[./a-zA-Z0-9$_-]+\\.png$": "RelativeImageStub"
},
"testPathIgnorePatterns": [
"/node_modules/"
],
"collectCoverage": true,
"verbose": true,
"modulePathIgnorePatterns": [
"rpmbuild"
],
"unmockedModulePathPatterns": [
"<rootDir>/node_modules/react/",
"<rootDir>/node_modules/react-dom/",
"<rootDir>/node_modules/react-addons-test-utils/",
"<rootDir>/node_modules/fbjs",
"<rootDir>/node_modules/core-js"
]
},
我错过了什么?
8条答案
按热度按时间oogrdqng1#
moduleNameMapper
是告诉Jest如何解释不同扩展名的文件的设置。你需要告诉它如何处理更少的文件。在项目中创建一个如下所示的文件(如果愿意,可以使用其他名称或路径):
config/CSSStub.js
这个stub是我们要告诉Jest使用的模块,而不是CSS或Less文件。然后更改
moduleNameMapper
设置,并在它的对象中添加以下行来使用它:现在,Jest会将任何CSS或Less文件视为导出空对象的模块。您还可以做其他事情-例如,如果您使用CSS模块,则可以使用代理,以便每次导入都返回导入的属性名称。
请阅读此guide了解更多信息。
oyt4ldly2#
我通过在package.json文件的jest配置中使用
moduleNameMapper
键解决了这个问题在此之后,您将需要创建两个文件,如下所述
一个月一个月
__mocks__/fileMock.js
如果您使用的是CSS模块,那么最好模拟一个代理来启用className查找。因此,您的配置将更改为:
但是您需要安装
identity-obj-proxy
包作为开发依赖项,即有关详细信息.您可以参阅jest docs
ax6ht2ek3#
从2018年2月开始使用***create-react-app***的更新。你不能覆盖package.json中的moduleNameMapper,但在jest.config.js中它可以工作,不幸的是我没有找到任何关于它为什么工作的文档。所以我的***jest.config.js***看起来像这样:
并且可以很好地跳过scss文件和@import。
支持我的答案,我跟随jest webpack
biswetbf4#
类似的情况下,安装identity-object-proxy并将其添加到我的CSS jest配置中对我来说是有效的。
我看到的特定错误:
camsedfj5#
如果你使用的是ts-jest,上面的解决方案都不起作用!你需要模拟转换。
配置文件. js
文件-模拟. js
样式-模拟. js
我发现这个工作example如果你想了解更多细节。
7cwmlq896#
@import意外标记的解决方案=:)
安装软件包:
在jest.config.js中添加
57hvy0tb7#
更新:2021年8月如果你使用的是Next JS with TypeScript.只需按照示例repo.
否则,您将浪费数天时间来配置环境。
https://github.com/vercel/next.js/tree/canary/examples/with-jest
wqlqzqxt8#
我在package.json的底部添加了moduleNameMapper,在那里我配置了jest,如下所示: