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

Jest能否处理带问号的导入?SVG?url导入配置失效求助

解决Jest中SVG?url导入的模块找不到问题

你遇到的问题是Jest无法识别带?url查询参数的SVG导入,原因是Jest默认会把查询参数当作模块名称的一部分,而你之前的transform正则没有正确匹配这种格式。下面是两种可行的解决方法:

方法一:使用moduleNameMapper映射

moduleNameMapper是Jest专门用来处理模块路径映射的配置,比transform更适合处理带查询参数的模块:

  1. 确保已经安装jest-transform-stub:
npm install jest-transform-stub --save-dev
  1. 修改jest.config.ts:
export default {
  // 保留你原有的其他配置(比如testEnvironment、roots等)
  moduleNameMapper: {
    // 匹配所有带?url后缀的SVG文件
    '\\.svg\\?url$': 'jest-transform-stub',
    // 其他静态资源的映射可以统一放在这里
    '\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
  },
  // 确保JS/TS文件的正常转换
  transform: {
    '^.+\\.(js|jsx|ts|tsx)$': 'babel-jest',
  },
};

方法二:修正transform的正则表达式

如果你更倾向于用transform处理,需要调整正则来准确匹配带?url的SVG:

修改jest.config.ts中的transform规则:

export default {
  // 其他配置...
  transform: {
    '^.+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
    // 单独匹配带?url的SVG
    '^.+\\.svg\\?url$': 'jest-transform-stub',
    // JS/TS文件转换
    '^.+\\.(js|jsx|ts|tsx)$': 'babel-jest',
  },
};

为什么之前的配置无效?

你之前的正则svg\?url被包含在括号里,实际匹配的是.svg?url作为文件扩展名,但Jest解析时会把?url当作模块路径的一部分,不是扩展名,所以原正则无法正确命中目标模块。

配置修改完成后,重新运行Jest测试即可解决模块找不到的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 12:12:49