如何在测试环境中先后执行两个Reducer以更新状态?
解决Reducer依赖更新后状态的测试问题
你的问题核心在于每次调用reducer时,都传入了undefined作为初始状态——这意味着每次调用都是从头计算状态,完全没用到第一次执行后的结果。Redux的reducer是纯函数,它不会修改外部状态,而是返回新的状态对象,所以你需要把第一次调用的返回值保存下来,作为第二次调用的初始状态。
正确的测试写法应该是这样的:
it('returns the correct state', () => { const firstAction = { type: FOO, /* 补充其他必要属性 */ }; const secondAction = { type: BAR, /* 补充其他必要属性 */ }; // 第一步:执行第一个action,获取更新后的状态 const stateAfterFirstAction = reducer(undefined, firstAction); // 第二步:用更新后的状态作为初始值,执行第二个action const finalState = reducer(stateAfterFirstAction, secondAction); // 断言最终状态符合预期 expect(finalState).toEqual(/* 填入你期望的最终状态结构 */); });
额外说明:
- Redux reducer的设计逻辑就是接收当前状态和action,返回新状态,必须显式传递上一次的状态结果,才能模拟真实应用中的状态连续更新流程。
- 如果你的业务有自定义的
initialState,第一次调用也可以传入initialState代替undefined,效果一致(因为reducer接收到undefined时会自动返回预设的初始状态)。 - 要是需要测试多步复杂状态更新,只需依次把每一步的状态结果传递给下一次的reducer调用,就能完整复现真实场景的状态流转。
内容的提问来源于stack exchange,提问作者four-eyes
相关产品推荐
相关产品推荐

