Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.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
Javascript 如何使用react测试库测试定制钩子_Javascript_Reactjs_Unit Testing_React Hooks_React Hooks Testing Library - Fatal编程技术网

Javascript 如何使用react测试库测试定制钩子

Javascript 如何使用react测试库测试定制钩子,javascript,reactjs,unit-testing,react-hooks,react-hooks-testing-library,Javascript,Reactjs,Unit Testing,React Hooks,React Hooks Testing Library,我尝试使用react钩子测试库,但似乎无法处理使用useContext的钩子。 import React,{useContext}来自“React” 从“../../AuthContext/AuthContext”导入{AuthContextData} const useAuthContext=()=>{ const{authState}=useContext(AuthContextData) const{isAuth,token,userId,userData}=authState 返回{is

我尝试使用react钩子测试库,但似乎无法处理使用useContext的钩子。
import React,{useContext}来自“React”
从“../../AuthContext/AuthContext”导入{AuthContextData}
const useAuthContext=()=>{
const{authState}=useContext(AuthContextData)
const{isAuth,token,userId,userData}=authState
返回{isAuth,token,userId,userData}
}

导出默认useAuthContext
您必须将钩子包装到上下文提供程序中:

let authContext
renderHook(() => (authContext = useAuthContext()), {
  wrapper: ({ children }) => (
    <AuthContextData.Provider value={/* Your value */}>
      {children}
    <AuthContextData.Provider>
  )
})
让authContext
renderHook(()=>(authContext=useAuthContext()){
包装器:({children})=>(
{儿童}
)
})

假设您有一个组件,在该组件中调用useContext(上下文)钩子以获得一个应为false或true的密钥isLoading

如果要在组件中测试useContext,可以按照以下步骤进行测试:

const context = jest.spyOn(React, 'useContext');
如果同一文件中的每个测试需要具有不同的上下文值,那么在测试中,您可以如下模拟实现:

context.mockImplementationOnce(() => {
    return { isLoading: false };
  });
或在测试之外,使所有测试具有相同的上下文:

context.mockImplementation(() => {
    return { isLoading: false };
  });
希望能有帮助