Jest测试报错:Svg非styled component无法通过组件选择器引用求助
解决Jest测试中SVG相关的Styled Components报错
错误根源
测试代码把普通SVG资源(非styled-components定义的组件)当成了styled组件来查询或断言,比如用findByComponent(Svg)方法查找SVG,或是在样式测试里错误指向SVG文件。
具体修复方案
调整组件查询逻辑
停止用screen.findByComponent、renderResult.getByComponent这类针对styled组件的方法查找SVG,换成DOM元素查询方式:- 若SVG作为
img的src:给img添加alt属性,用screen.getByAltText('你的alt文本')或screen.getByRole('img', { name: /图标描述/i })查询。 - 若SVG作为background-image:直接查询承载该背景的容器元素,比如
screen.getByTestId('带svg背景的容器'),再对其样式做断言。
- 若SVG作为
修正样式测试的断言对象
如果测试里写了类似expect(xxx).toHaveStyleRule('background-image', expect.stringContaining('svg')),确保断言的是容器元素的样式,而非SVG文件本身。配置Jest正确解析SVG
在jest.config.js里添加SVG的映射规则:module.exports = { moduleNameMapper: { '\\.svg$': '<rootDir>/__mocks__/svgMock.js', }, };然后在项目根目录创建
__mocks__/svgMock.js,内容如下:module.exports = 'svg-mock-url';这样Jest会把SVG解析为字符串URL,不会误识别为组件。
检查SVG导入方式
确认组件里导入SVG的写法是import svgUrl from './icon.svg'(作为资源URL),而非错误的解构导入import { Svg } from './icon.svg'。
内容的提问来源于stack exchange,提问作者Марья Столярова
相关产品推荐
相关产品推荐

