如何重新赋值mockStore.overrideSelector()设置的返回值?
问题原因
resetSelectors 方法的作用是清除所有 selector 的自定义覆盖配置,让 selector 恢复到原始的实现逻辑,而非清除上一次设置的覆盖值。如果你的原始 selector 逻辑默认返回 true,就会出现修改后仍返回原值的问题。
解决方案
方法1:直接重写覆盖(适用于 NgRx 7.0+ 版本)
已经设置过覆盖值的 selector,不需要重置,直接二次调用 overrideSelector 传入新值,再触发状态刷新即可:
mockStore.overrideSelector(someSelector, false); mockStore.refreshState(); spectator.detectChanges();
方法2:清除记忆化缓存后重写(适用于 createSelector 生成的带缓存的 selector)
如果你的 selector 是通过 createSelector 生成的带记忆化能力的 selector,需要先清除缓存再重写:
someSelector.release(); // 清除selector的记忆化缓存 mockStore.overrideSelector(someSelector, false); mockStore.refreshState(); spectator.detectChanges();
校验方法
如果修改后仍有疑问,可以通过快照方法直接验证 selector 的返回值:
console.log(mockStore.selectSnapshot(someSelector));
内容的提问来源于stack exchange,提问作者Kode_12
相关产品推荐
相关产品推荐

