在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
相关产品推荐
相关产品推荐

