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不符
修复方案
任选一种即可:
- 每次测试传入全新的初始状态,不要复用静态的
_initialState:
把.withReducer的第二个参数改为{session: {disconnectCounts: {}}},每次生成新对象 - 将静态初始状态改为工厂函数,每次调用返回新对象:
测试时传入public static getInitialState = () => ({ disconnectCounts: {}, }){session: SessionReducer.getInitialState()} - 用beforeEach钩子在每个测试运行前重置
_initialState的属性,保证每个测试的初始状态干净
内容的提问来源于stack exchange,提问作者Robel Robel Lingstuyl
相关产品推荐
相关产品推荐

