Javascript 如何使用react测试库测试定制钩子
我尝试使用react钩子测试库,但似乎无法处理使用useContext的钩子。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
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 };
});
希望能有帮助