You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将SVG作为ReactComponent使用时Jest测试报错问题排查

问题原因与解决方案

1. Jest 未处理 SVG ReactComponent 导入

开发环境中(如 Webpack/Vite)的 loader 会将 SVG 文件转换为 React 组件,但 Jest 默认不识别 {ReactComponent as XXX} 这种导入语法,导致导入的 SVG 组件在测试环境中为 undefined,渲染时触发类型错误。

解决方法:
配置 Jest 对 SVG 文件进行 mock:

  • 在 Jest 配置文件(jest.config.js/jest.config.ts)中添加:
moduleNameMapper: {
  '\\.svg$': '<rootDir>/__mocks__/svgMock.tsx'
}
  • 在项目根目录创建 __mocks__/svgMock.tsx 文件,内容如下:
import React from 'react';
const MockSvg = () => <svg />;
export const ReactComponent = MockSvg;
export default MockSvg;

2. mapCategory 函数缺少 default 分支

如果传入的 category 不在 switch 的 case 列表中,函数会返回 undefined,而 React 无法渲染 undefined,直接抛出类型错误。即使业务代码不会传入无效值,测试用例可能触发边界场景。

解决方法:
给 switch 添加 default 分支,返回默认组件或占位元素:

export const mapCategory: React.FC<any> = (category: string) => {
  const _category = category.toUpperCase();

  switch (_category) {
    case 'DEFI':
      return <Defi/>;
    case 'DEVELOPMENT':
      return <Development/>;
    case 'EDUCATION':
      return <Education/>;
    case 'GAMES':
      return <Games/>;
    case 'IDENTITY':
      return <Identity/>;
    case 'MARKETPLACE':
      return <Marketplace/>;
    case 'NFT':
      return <NFT/>;
    case 'OTHER':
      return <Other/>;
    case 'SECURITY':
      return <Security/>;
    case 'SOCIAL':
      return <Social/>;
    // 添加默认分支
    default:
      return <Other/>; // 或返回 null、<span /> 等占位元素
  }
}

3. 测试用例可能传入未覆盖的 category 值

检查测试代码中是否给 CategoryChip 传入了不在映射列表中的 label,触发 mapCategory 返回 undefined 的情况。

解决方法:
确保测试用例的 label 都在映射的 category 范围内,或者配合上述 default 分支处理。

内容的提问来源于stack exchange,提问作者balteo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:45:18