Reactjs 测试自定义挂钩:不变冲突:找不到react-redux上下文值;请确保组件包装在<;供应商>;
我有一个定制的钩子,我想测试一下。它接收redux存储分派函数并返回函数。为了得到结果,我正在尝试:Reactjs 测试自定义挂钩:不变冲突:找不到react-redux上下文值;请确保组件包装在<;供应商>;,reactjs,redux,jestjs,react-testing-library,Reactjs,Redux,Jestjs,React Testing Library,我有一个定制的钩子,我想测试一下。它接收redux存储分派函数并返回函数。为了得到结果,我正在尝试: const { result } = renderHook(() => { useSaveAuthenticationDataToStorages(useDispatch())}); 但是,我得到一个错误: 不变冲突:找不到react redux上下文值;请确保组件包装在 发生这种情况的原因是useDispatch,并且没有连接存储。但是,我这里没有任何组件可以用提供程序包装。。我只需要
const { result } = renderHook(() => { useSaveAuthenticationDataToStorages(useDispatch())});
但是,我得到一个错误:
不变冲突:找不到react redux上下文值;请确保组件包装在
发生这种情况的原因是useDispatch
,并且没有连接存储。但是,我这里没有任何组件可以用提供程序包装。。我只需要测试这个钩子,它只是将数据保存到一个存储中
如何修复它?react hooks测试库对此进行了更深入的研究。然而,我们实际上缺少的是通过创建包装器可以获得的提供者。首先,我们声明一个组件,它将是我们的提供者:
import { Provider } from 'react-redux'
const ReduxProvider = ({ children, reduxStore }) => (
<Provider store={reduxStore}>{children}</Provider>
)
从'react redux'导入{Provider}
const ReduxProvider=({children,reduxStore})=>(
{儿童}
)
然后在我们的测试中,我们调用
test("...", () => {
const store = configureStore();
const wrapper = ({ children }) => (
<ReduxProvider reduxStore={store}>{children}</ReduxProvider>
);
const { result } = renderHook(() => {
useSaveAuthenticationDataToStorages(useDispatch());
}, { wrapper });
// ... Rest of the logic
});
test(“…”,()=>{
const store=configureStore();
常量包装器=({children})=>(
{儿童}
);
常量{result}=renderHook(()=>{
UseSaveAuthenticationDataToStorage(useDispatch());
},{wrapper});
//…其余的逻辑
});
这可能是一个迟交的答案,但您也可以在测试中使用它
jest.mock('react-redux', () => {
const ActualReactRedux = jest.requireActual('react-redux');
return {
...ActualReactRedux,
useSelector: jest.fn().mockImplementation(() => {
return mockState;
}),
};
});
我不确定我是否理解这一点。我将此添加到测试中,但仍然看到关于缺少
的错误。你能扩展这个答案吗?考虑提供完整的答案。我得到一个错误<代码> Type Error:Reald.RealError不是一个函数< /代码>,你知道为什么吗?@ Sachihiro你需要<代码> JEST。