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

如何在Jest中Mock远程React组件以覆盖errorHandler方法?

如何Mock RemoteComponent以覆盖errorHandler方法

要测试MyComponent中的errorHandler是否正确调用传入的triggerLog,你可以通过Jest Mock第三方的RemoteComponent,手动触发它的errorLogCallback来验证逻辑,具体实现如下:

步骤1:Mock RemoteComponent模块

用Jest的jest.mock方法完全Mock掉@remote-module/remote-component,让它成为一个可追踪props的模拟组件,无需渲染实际内容。

步骤2:编写测试用例

创建模拟的triggerLog函数,渲染MyComponent后,获取RemoteComponent接收到的errorLogCallback,手动调用它并验证triggerLog的调用情况。

完整测试代码示例

import { render } from '@testing-library/react';
import MyComponent from './MyComponent';
import RemoteComponent from '@remote-module/remote-component';

// Mock第三方RemoteComponent组件
jest.mock('@remote-module/remote-component', () => jest.fn(() => null));

describe('MyComponent', () => {
  it('触发errorHandler时会调用传入的triggerLog', () => {
    // 创建模拟的triggerLog函数,追踪调用情况
    const mockTriggerLog = jest.fn();

    // 渲染MyComponent并传入模拟的triggerLog
    render(<MyComponent triggerLog={mockTriggerLog} />);

    // 从RemoteComponent的mock调用中取出errorLogCallback(即组件内的errorHandler)
    const { errorLogCallback } = (RemoteComponent as jest.Mock).mock.calls[0][0];

    // 模拟错误发生,手动调用errorLogCallback
    const testError = new Error('测试错误');
    errorLogCallback(testError);

    // 断言triggerLog是否被正确调用,参数为测试错误
    expect(mockTriggerLog).toHaveBeenCalledWith(testError);
  });
});

另一种更直观的Mock方式

也可以在Mock组件时直接存储接收到的props,后续直接取用:

import { render } from '@testing-library/react';
import MyComponent from './MyComponent';
import RemoteComponent from '@remote-module/remote-component';

let remoteComponentProps: Record<string, any>;

// Mock组件时存储props
jest.mock('@remote-module/remote-component', () => (props) => {
  remoteComponentProps = props;
  return null;
});

describe('MyComponent', () => {
  it('触发errorHandler时会调用传入的triggerLog', () => {
    const mockTriggerLog = jest.fn();
    render(<MyComponent triggerLog={mockTriggerLog} />);

    // 直接从存储的props中获取errorLogCallback并调用
    const testError = new Error('测试错误');
    remoteComponentProps.errorLogCallback(testError);

    expect(mockTriggerLog).toHaveBeenCalledWith(testError);
  });
});

这两种方式都能有效覆盖errorHandler的逻辑,验证当RemoteComponent触发错误回调时,MyComponent是否正确将错误传递给了triggerLog。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 20:20:22