Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 测试自定义挂钩:不变冲突:找不到react-redux上下文值;请确保组件包装在<;供应商>;_Reactjs_Redux_Jestjs_React Testing Library - Fatal编程技术网

Reactjs 测试自定义挂钩:不变冲突:找不到react-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,并且没有连接存储。但是,我这里没有任何组件可以用提供程序包装。。我只需要

我有一个定制的钩子,我想测试一下。它接收redux存储分派函数并返回函数。为了得到结果,我正在尝试:

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。