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

如何使用Jest/Enzyme测试组件内img标签的onError事件逻辑

测试img标签onError降级逻辑的实现方案

假设你已经完成Jest+Enzyme的测试环境配置,以下是具体测试步骤:

1. 前置准备:mock静态资源

首先在测试文件开头mock你用到的两张图片资源,避免Jest解析静态资源报错:

jest.mock('你的img1资源路径', () => 'test-img1-url');
jest.mock('你的defaultImg资源路径', () => 'test-default-url');

2. 编写测试用例

方式1:shallow浅层渲染测试

适合只测组件本身逻辑,不关心子组件渲染的场景:

import { shallow } from 'enzyme';
import 你的组件名 from './你的组件路径';

describe('图片加载降级逻辑测试', () => {
  it('img加载失败时应替换为默认图,且清除onError避免循环触发', () => {
    const wrapper = shallow(<你的组件名 />);
    const imgNode = wrapper.find('img');
    
    // 构造模拟的error事件对象
    const mockEvent = {
      target: {
        onError: jest.fn(),
        src: 'test-img1-url'
      }
    };
    // 主动触发onError回调
    imgNode.invoke('onError')(mockEvent);

    // 结果断言
    expect(mockEvent.target.onError).toBeNull(); // 验证onError被置空,避免死循环
    expect(mockEvent.target.src).toBe('test-default-url'); // 验证src被替换为默认图
  });
});

方式2:mount全量渲染测试

如果需要模拟真实DOM事件触发的场景,用mount渲染:

import { mount } from 'enzyme';

it('全量渲染场景下加载失败触发降级', () => {
  const wrapper = mount(<你的组件名 />);
  const imgNode = wrapper.find('img');
  
  // 模拟真实error事件触发
  imgNode.simulate('error');

  // 断言真实DOM属性
  expect(imgNode.getDOMNode().onError).toBeNull();
  expect(imgNode.getDOMNode().src).toContain('test-default-url');
});

核心校验点说明

一定要验证onError = null的逻辑,否则如果默认图也加载失败,会进入死循环反复触发onError,这是你当前代码逻辑的关键校验项。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:36:04