使用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
相关产品推荐
相关产品推荐

