如何使用 React 测试库测试自定义 Hook
How to Test Custom Hook with react testing library
我尝试使用 react-hooks-testing-library,但似乎无法处理使用 useContext 的挂钩。
import React,{useContext} from 'react'
import {AuthContextData} from '../../AuthContext/AuthContext'
const useAuthContext = () => {
const {authState} = useContext(AuthContextData)
const {isAuth,token,userId,userData} = authState
return {isAuth,token,userId,userData}
}
export default useAuthContext
您必须将钩子包装在上下文提供程序中:
let authContext
renderHook(() => (authContext = useAuthContext()), {
wrapper: ({ children }) => (
<AuthContextData.Provider value={/* Your value */}>
{children}
<AuthContextData.Provider>
)
})
假设您有一个组件,您可以在其中调用 useContext(context) 挂钩来获取应该为 false 或 true 的键 isLoading。
如果你想在组件中测试 useContext,你可以按如下方式测试它:
const context = jest.spyOn(React, 'useContext');
如果同一文件中的每个测试都需要具有不同的上下文值,那么在您的测试中,您可以像这样模拟实现:
context.mockImplementationOnce(() => {
return { isLoading: false };
});
或测试之外的所有测试具有相同的上下文:
context.mockImplementation(() => {
return { isLoading: false };
});
希望对您有所帮助。
我尝试使用 react-hooks-testing-library,但似乎无法处理使用 useContext 的挂钩。
import React,{useContext} from 'react'
import {AuthContextData} from '../../AuthContext/AuthContext'
const useAuthContext = () => {
const {authState} = useContext(AuthContextData)
const {isAuth,token,userId,userData} = authState
return {isAuth,token,userId,userData}
}
export default useAuthContext
您必须将钩子包装在上下文提供程序中:
let authContext
renderHook(() => (authContext = useAuthContext()), {
wrapper: ({ children }) => (
<AuthContextData.Provider value={/* Your value */}>
{children}
<AuthContextData.Provider>
)
})
假设您有一个组件,您可以在其中调用 useContext(context) 挂钩来获取应该为 false 或 true 的键 isLoading。
如果你想在组件中测试 useContext,你可以按如下方式测试它:
const context = jest.spyOn(React, 'useContext');
如果同一文件中的每个测试都需要具有不同的上下文值,那么在您的测试中,您可以像这样模拟实现:
context.mockImplementationOnce(() => {
return { isLoading: false };
});
或测试之外的所有测试具有相同的上下文:
context.mockImplementation(() => {
return { isLoading: false };
});
希望对您有所帮助。