kid*_*ney 4 reactjs enzyme react-redux react-hooks
我一直在使用 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。
小智 11
我有同样的问题
我的解决方案
import * as Redux from "react-redux";
jest.mock("react-redux", () => ({
...jest.requireActual("react-redux"),
useSelector: jest.fn(),
}));
describe("Blabla", () => {
const mockedState = {
user: {
firstname: "John",
},
};
beforeEach(() => {
Redux.useSelector.mockImplementation((callback) => {
return callback(mockedState);
});
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5439 次 |
| 最近记录: |