You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jest与React Testing Library时fireEvent.keydown无法触发事件

测试按钮Enter键触发事件及关联方法时的问题

我在测试按钮的Enter键触发事件及关联方法时遇到问题。我的组件有两个按钮:refine search和close,希望实现按Enter键时触发对应按钮的点击功能,因此在onKeydown事件中调用keyDownHandler方法来执行相应逻辑。

组件中的方法

const keyDownHandler = event => {
  const targetValue = event.target.id
  if(event.key === 'Enter' || event.keyCode=== 13){
      if(targetvalue === 'someid1'){
          return executeHandleRefineSearch()
      }
      if(targetvalue === 'someid2'){
          return executeHandleClose()
      }
  }
}

初始测试用例

import React from 'react'
import { cleanup, render, fireEvent } from '@testing-library/react'
import ReactDOM from 'react-dom'
import '@testing-library/jest-dom/extend-expect'
import myButtonGroup from '.'

afterEach(cleanup)

beforeAll(() => {})

describe('myButtonGroup ', () => {

  it('renders without crashing', () => {
    const div = document.createElement('div')
    ReactDOM.render(<myButtonGroup/>, div)
  })

  it('enter key on clear button only should trigger executeHandleRefineSearch', () => {
    const { container } = render(<myButtonGroup />)
    const executeHandleRefineSearchMock = jest.fn()
    const event = {
     key: 'Enter',
     code: 'Enter',
     keyCode: 13,
     charCode: 13,
     target: { id: 'someid1' }
   }
   const refineSearchButton = container.querySelector(
    '#someid1'
   )
   fireEvent.keyDown(refineSearchButton, event)
   expect(executeHandleRefineSearchMock ).toHaveBeenCalled()
  })
})

遇到的错误

expect(jest.fn()).toHaveBeenCalled()

Expected number of calls: >= 1
Received number of calls:    0

更新后的测试用例

it('enter key on clear button only should trigger executeHandleRefineSearch', () => {
  const executeHandleRefineSearchMock = jest.fn()
  const { container } = render(
    <myButtonGroup 
      handleClearSearchValues={executeHandleRefineSearchMock}
    />
  )
  const event = {
    key: 'Enter',
    keyCode: 13,
    charCode: 13,
    target: { id: 'someid' }
  }
  const refineSearchButton = container.querySelector(
    '#someid'
  )
  refineSearchButton.focus()
  userEvent.click(refineSearchButton, event)
  expect(handleClearSearchValuesMock).toHaveBeenCalled()
})

恳请各位提供解决建议。


内容的提问来源于stack exchange,提问作者Jayesh Ambali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:42:19