我一直在使用 Enzyme 浅渲染的测试中使用以下模式来模拟 React-Redux 钩子:
import * as redux from "react-readux";
...
jest.spyOn(redux, "useSelector").mockReturnValue(Generator.generateUser());
Run Code Online (Sandbox Code Playgroud)
然而,在迁移到react-redux 8.0.1(从7.2.6)之后,这种模式不再有效,我收到以下错误:
TypeError: Cannot redefine property: useSelector
at Function.defineProperty (<anonymous>)
Run Code Online (Sandbox Code Playgroud)
我怀疑这与 React-Redux 内部的变化有关(如 8.x 发行说明中所宣布的)。有人对如何克服这个问题有什么建议吗?我尝试将渲染包装在 Provider 中并使用dive():
TypeError: Cannot redefine property: useSelector
at Function.defineProperty (<anonymous>)
Run Code Online (Sandbox Code Playgroud)
但这会抛出"could not find react-redux context value; please ensure the component is wrapped in a <Provider>". 此外,虽然这对 有所帮助useSelector,但对于模拟来说不太有用useDispatch。