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

在Enzyme的MemoryRouter中无法设置组件Props的解决求助

解决MemoryRouter包裹下修改Users组件props的问题

没问题,我来帮你搞定这个需求!你已经写好了挂载组件的方法,接下来只需要定位到内层的Users组件,就能调用setProps修改users的值了,具体步骤和代码示例如下:

  • 第一步:从wrapper中定位到Users组件
    因为你的Users被Provider和MemoryRouter多层包裹着,所以要用Enzyme的find方法精准找到它:

    const usersInstance = wrapper.find(Users);
    
  • 第二步:调用setProps更新users属性
    拿到组件实例后,直接传入新的users数组即可完成更新:

    usersInstance.setProps({ users: [{ id: 1, name: "Alice" }, { id: 2, name: "Bob" }] });
    
  • 第三步:(可选)刷新组件并验证效果
    如果需要确认更新是否生效,可以调用wrapper.update()刷新整个组件树,然后做断言验证:

    wrapper.update();
    // 比如验证Users组件的users prop是否已经更新
    expect(usersInstance.prop("users")).toEqual([{ id: 1, name: "Alice" }, { id: 2, name: "Bob" }]);
    

这里有个小提醒:如果你的Users组件是通过Redux的connect高阶组件连接到store的,在真实业务场景中更推荐通过dispatch action来更新store数据,但如果是测试场景下需要快速修改props,上面的方法完全适用。

最后给你一个完整的可运行示例:

// 确保已经导入Users组件和相关依赖
const mountComponent = props => mount( 
  <Provider store={store}> 
    <MemoryRouter> 
      <Users {...props}/> 
    </MemoryRouter> 
  </Provider> 
);

// 初始化挂载,users为空数组
const wrapper = mountComponent({ users: [] });

// 修改users props
const usersInstance = wrapper.find(Users);
usersInstance.setProps({ users: [{ id: 3, name: "Charlie" }] });

// 验证更新结果
wrapper.update();
expect(wrapper.find(Users).prop("users")).toEqual([{ id: 3, name: "Charlie" }]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:58:24