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

TypeError: URL.createObjectURL不是函数——Antd Charts测试失败求助

解决Jest测试中@ant-design/plots触发的URL.createObjectURL is not a function错误

你遇到的问题根源是:Jest运行在Node.js环境中,而@ant-design/plots依赖的@antv/g2库在初始化时会调用浏览器特有的URL.createObjectURLAPI(用于创建Web Worker),Node环境默认不提供这个API,导致测试报错。以下是几个可行的解决方案:

方案一:全局模拟URL.createObjectURL

在Jest初始化流程中手动模拟该API:

  1. 在项目src目录下创建setupTests.ts文件,添加代码:
global.URL.createObjectURL = jest.fn();
  1. 修改jest.config.js(或jest.config.ts),将该文件配置为测试启动时的初始化脚本:
module.exports = {
  // 保留原有其他配置
  setupFilesAfterEnv: ['<rootDir>/src/setupTests.ts'],
};

方案二:Mock掉@ant-design/plots组件

如果测试不需要验证图表组件的渲染细节,直接Mock整个库可彻底避免加载底层依赖代码:
在测试文件(如App.test.tsx)顶部添加Mock代码:

jest.mock('@ant-design/plots', () => ({
  Bar: jest.fn(() => null),
  Pie: jest.fn(() => null),
  Progress: jest.fn(() => null),
  // 根据你实际使用的组件补充对应Mock
}));

方案三:确保Jest使用jsdom环境

jsdom模拟了浏览器DOM环境,内置URL.createObjectURLAPI:

  1. 检查jest.config.js中的testEnvironment配置,确保设置为jsdom:
module.exports = {
  testEnvironment: 'jsdom',
  // 其他配置...
};
  1. React 18及以上版本需手动安装jsdom依赖:
npm install --save-dev jsdom

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

相关产品推荐
方舟 Agent Plan

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

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