reactjs - 如何测试可以将html元素的引用传递给它的 react 钩子(Hook)

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

我有一个自定义钩子(Hook),它可以将可选的 ref 作为对象的属性传递给它,该钩子(Hook)将其作为参数:

export const useShortcuts = ({ ref }) => {
  useEffect(() => {
    const trapper = new mousetrap(ref.current);

代码有效,但我现在尝试使用 react-testing-library 编写测试。和 @testing-library/react-hooks图书馆。

我正在使用 renderHook来自 @testing-library/react-hooks但我不知道如何在组件之外创建引用或模拟引用。
  it('should create shortcuts with no ref', () => {
    const ref = ?????  // how do I do this

    const { result } = renderHook(() => useShortcuts({ ref }), {
      initialProps: true
    });
  });

最佳答案

您可以使用 React.createRef 创建引用
const ref = React.createRef()
下面的完整工作示例

import React, { useEffect } from 'react'
import { renderHook } from '@testing-library/react-hooks'

const useShortcuts = ({ ref }) => {
  useEffect(() => {
    ref.current = 1
  }, [])
}


it('works', () => {
  const ref = React.createRef()

  const { result } = renderHook(() => useShortcuts({ ref }))
  expect(ref.current).toEqual(1)
})

关于reactjs - 如何测试可以将html元素的引用传递给它的 react 钩子(Hook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57350205/

相关文章:

javascript - React中状态数据和解构的区别

javascript - Redux 错误操作必须是普通对象。使用自定义中间件进行异步操作

reactjs - React Native 将大型代码移动到单独的文件中 - 它是一个钩子(Hook)吗?

javascript - 如何从传递给监听器的回调中访问状态 Hook 值?

reactjs - 使用 redux 和 React 测试异步操作创建器时,无法读取未定义的属性 '.then'

javascript - 使用 Node 模块和 Rollup 构建 Web 客户端

reactjs - 如何动态使用 map 函数 Hook useState 属性

reactjs - 调用 renderHook() 后 waitFor 超时

javascript - 如何使用 React 测试库测试自定义 Hook