reactjs - 如何模拟 react 自定义钩子(Hook)返回值?

标签 reactjs jestjs react-hooks react-testing-library

这是我的自定义钩子(Hook):

  export function useClientRect() {
    const [scrollH, setScrollH] = useState(0);
    const [clientH, setClientH] = useState(0);
    const ref = useCallback(node => {
      if (node !== null) {
        setScrollH(node.scrollHeight);
        setClientH(node.clientHeight);
      }
    }, []);
    return [scrollH, clientH, ref];
  }
}

我希望每次调用它时,它都会返回我的值。像:
jest.mock('useClientRect', () => [300, 200, () => {}]);

我怎样才能做到这一点?

最佳答案

将钩子(Hook)作为模块加载。然后模拟模块:

jest.mock('module_name', () => ({
    useClientRect: () => [300, 200, jest.fn()]
}));

mock 应该在 test fn 之外的文件之上调用。因此,我们将只有一个数组作为模拟值。

如果你想在不同的测试中用不同的值模拟钩子(Hook):
import * as hooks from 'module_name';

it('a test', () => {
    jest.spyOn(hooks, 'useClientRect').mockImplementation(() => ([100, 200, jest.fn()]));
    //rest of the test
});

关于reactjs - 如何模拟 react 自定义钩子(Hook)返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60270013/

相关文章:

javascript - 模拟 Axios 来测试 .catch()

javascript - 如何在 react 中显示加载程序。使用钩子(Hook)

javascript - React Hook API,我是否需要为 SetStateAction 设置依赖?

javascript - 我无法在我的 React 应用程序中修改我的 SVG 组件

javascript - CKEditor(5) - 如何删除选择表小部件?

reactjs - 在 ReactJS 中使用状态更新模拟多个获取调用

typescript - 使用 'csv-parse/sync' 库后 Jest 测试失败

reactjs - React TypeScript 使用组件的 props 声明接口(interface)

javascript - 如何修复 data.map 而不是函数 api

css - React Material UI 选项卡 css