1

我尝试使用 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

4

2 回答 2

3

您必须将钩子包装在上下文提供程序中:

let authContext
renderHook(() => (authContext = useAuthContext()), {
  wrapper: ({ children }) => (
    <AuthContextData.Provider value={/* Your value */}>
      {children}
    <AuthContextData.Provider>
  )
})
于 2019-03-29T18:52:25.290 回答
0

假设您有一个组件,您在其中调用 useContext(context) 钩子来获取应该为假或真的键 isLoading。

如果要在组件中测试 useContext ,可以按如下方式进行测试:

const context = jest.spyOn(React, 'useContext');

如果同一文件中的每个测试都需要具有不同的上下文值,那么在您的测试中,您可以像这样模拟实现:

context.mockImplementationOnce(() => {
    return { isLoading: false };
  });

或在所有测试的测试之外具有相同的上下文:

context.mockImplementation(() => {
    return { isLoading: false };
  });

希望能帮助到你。

于 2019-08-30T10:37:07.690 回答