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

Mock Redux Store未返回预期值,如何验证其存储内容?

验证Mock Redux Store存储值的方法

1. 直接调用Mock Store的getState()方法验证状态

redux-mock-store生成的实例自带getState()方法,可直接获取当前存储的状态,和预期值对比:

// 在创建store后或组件渲染后添加
console.log('当前Mock Store状态:', store.getState());
// 断言状态是否符合预期
expect(store.getState().project.name).toBe('Test Project');

2. 修正组件中useSelector的映射错误

你组件里的代码const { project } = useSelector((state) => state.project);存在逻辑问题:
你的Mock Store结构是{ project: { name: 'Test Project' } },state.project已经是包含name的对象,此时解构{ project }会因为该对象内没有project属性而得到undefined,最终导致拿到空字符串。正确写法应该是:

// 直接获取整个project对象
const project = useSelector((state) => state.project);
// 或者直接解构name属性
const { name } = useSelector((state) => state.project);

这才是组件中useSelector返回空的核心原因。

3. 在测试用例中补充状态验证步骤

可以在测试的关键节点(初始化store后、组件渲染后)添加状态断言,确保数据流转正确:

test('renders checklists from state and displays the project name', async () => {
  const project = { name: 'Test Project' };
  const store = mockStore({ project });

  // 初始化后立即验证store状态
  expect(store.getState().project).toEqual(project);

  await act(async () => {
    render(
      <Provider store={store}>
        <Checklists />
      </Provider>,
      container
    );
  });

  // 渲染后再次验证store状态(若有action触发状态变更也可在此检查)
  expect(store.getState().project.name).toBe('Test Project');

  const projectName = container.querySelector('.Checklists-ProjectName');
  expect(projectName.textContent).toBe(project.name);
});

额外排查方向

  • 确认组件中useSelector的state路径是否和实际reducer结构匹配,比如是否应为state.projects.active这类路径
  • 检查组件内是否有条件渲染逻辑,导致.Checklists-ProjectName元素未被渲染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:31:21