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

如何用Jest测试基于react-lazy-load-image-component的懒加载组件

报错原因

该报错是因为Jest默认的jsdom运行环境未实现IntersectionObserver API,而react-lazy-load-image-component的懒加载逻辑完全依赖这个API,因此组件初始化阶段就会抛出类型错误。

解决方案

方案1:全局模拟IntersectionObserver(适合需要测试懒加载行为的场景)

在Jest全局初始化文件(通常为src/setupTests.ts或jest.setup.js,即你配置中setupFilesAfterEnv指向的文件)中添加全局模拟逻辑:

global.IntersectionObserver = class IntersectionObserver {
  constructor(callback: IntersectionObserverCallback) {
    this.callback = callback;
  }
  callback: IntersectionObserverCallback;
  observe(target: Element) {
    // 直接标记元素进入视口,触发懒加载渲染
    this.callback([{ isIntersecting: true, target } as IntersectionObserverEntry], this);
  }
  unobserve() {}
  disconnect() {}
};

配置完成后原有测试代码无需修改即可正常运行,懒加载组件会在渲染时直接加载子内容。

方案2:Mock懒加载组件(适合仅验证业务逻辑的单元测试场景)

如果你的测试不需要验证懒加载本身的行为,可以直接在测试文件顶部Mock整个react-lazy-load-image-component库,跳过懒加载逻辑:

jest.mock('react-lazy-load-image-component', () => ({
  LazyLoadComponent: ({ children }: { children: React.ReactNode }) => <>{children}</>,
  // 如果用到该库的其他组件也可同步添加mock
  LazyLoadImage: (props: any) => <img {...props} />,
}));

该方案无需修改全局配置,性能更高,适配纯业务逻辑的测试场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:54:05