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

Jest运行单元测试时Highcharts导入触发undefined属性设置错误

解决Jest环境下导入Highcharts时报错Cannot set properties of undefined (setting 'highcharts')

错误原因

这个错误是因为Highcharts的UMD模块加载时,会尝试将自身挂载到浏览器的window对象上,但Jest默认的jsdom测试环境中,window对象可能未被正确初始化,或者模块加载时window还未就绪,导致赋值失败。

解决方案

1. 提前初始化完整浏览器环境

在Jest的全局setup文件(比如src/setupTests.js)中,手动初始化window和document对象,确保Highcharts能找到挂载的全局对象:

// src/setupTests.js
import { JSDOM } from 'jsdom';

const dom = new JSDOM('<!doctype html><html><body></body></html>');
global.window = dom.window;
global.document = dom.window.document;
global.navigator = dom.window.navigator;

// 补充Highcharts可能用到的全局方法
global.window.addEventListener = jest.fn();

2. Mock Highcharts(推荐,适合组件逻辑测试)

如果测试不需要验证图表真实渲染,只是测试组件业务逻辑,直接用Jest mock掉Highcharts及其模块,避免加载真实库:

// 在测试文件顶部或全局setup文件中
jest.mock('highcharts', () => ({
  chart: jest.fn(),
  setOptions: jest.fn(),
  // 根据组件用到的Highcharts方法补充对应mock
}));

// 针对Highcharts子模块做mock
jest.mock('highcharts/modules/exporting', () => jest.fn());
jest.mock('highcharts/modules/networkgraph', () => jest.fn());

3. 调整Jest转译配置

如果Highcharts源码包含未转译的ES语法,导致Jest无法解析,修改jest.config.js让Babel转译Highcharts相关模块:

// jest.config.js
module.exports = {
  // ...其他配置
  transform: {
    '^.+\\.(js|jsx)$': 'babel-jest',
  },
  transformIgnorePatterns: [
    // 仅排除node_modules中除highcharts及其模块外的内容
    'node_modules/(?!(highcharts|highcharts/modules)/)',
  ],
};

验证

修改配置后重新运行测试,即可解决Cannot set properties of undefined (setting 'highcharts')错误。若组件依赖Highcharts实例,可在mock中返回模拟实例以满足调用需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:20:39