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

Redux-saga-test-plan的expectSaga在独立测试间出现状态残留问题

问题原因

核心是静态初始状态SessionReducer._initialState是引用类型,所有测试共享同一份内存地址,被前序测试修改后没有重置,导致状态污染:

  • 你的reducer对state做的是浅拷贝newState = {...state},拷贝后newState.disconnectCounts仍然指向_initialState里的原始disconnectCounts对象
  • 第一个测试连续触发2次DEVICE_DISCONNECTED动作后,_initialState.disconnectCounts['111']已经被修改为2
  • 第二个测试运行时仍然复用了被污染的_initialState,再触发1次动作后计数变为2+1=3,和预期的1不符
修复方案

任选一种即可:

  1. 每次测试传入全新的初始状态,不要复用静态的_initialState:
    把.withReducer的第二个参数改为{session: {disconnectCounts: {}}},每次生成新对象
  2. 将静态初始状态改为工厂函数,每次调用返回新对象:
    public static getInitialState = () => ({
        disconnectCounts: {},
    })
    
    测试时传入{session: SessionReducer.getInitialState()}
  3. 用beforeEach钩子在每个测试运行前重置_initialState的属性,保证每个测试的初始状态干净

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 04:06:03