首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何模拟React.MouseEvent<{},MouseEvent> onClick事件?

如何模拟React.MouseEvent<{},MouseEvent> onClick事件?
EN

Stack Overflow用户
提问于 2020-08-13 21:34:06
回答 1查看 2.4K关注 0票数 15

我正在使用Jest测试用TypeScript编写的React组件。我不能使用.simulate(),因为人们反对直接调用组件的onClick()函数支柱。这是我的测试代码:

代码语言:javascript
复制
// Get the onClick function
const buttonOnClick = wrapper.find('#diffpicker-button').first().props().onClick;

// Make sure the function is not undefined
if (!buttonOnClick) return;

// Mock event
const clickEvent = new MouseEvent('click');
Object.assign(clickEvent, { preventDefault: jest.fn() });

// Call the onClick function
buttonOnClick(clickEvent);

但是,当我这样做时,我得到了一个错误:Argument of type 'MouseEvent' is not assignable to parameter of type 'MouseEvent<{}, MouseEvent>'.我的问题是,如何模拟MouseEvent<{},MouseEvent>类型的事件?

EN

回答 1

Stack Overflow用户

发布于 2022-11-16 16:03:11

如果您正在使用React,官方的测试建议是使用RTL和userEvent。允许你做以下事情..。

代码语言:javascript
复制
import {render} from '@testing-library/react'
import userEvent from '@testing-library/user-event'

const dom = render(<MyComponent {...myProps} />)
await userEvent.click(dom.getByRole('button', {name: 'Go'}))

您可以使用jest.fn()来模拟单击处理程序,如下所示..。

代码语言:javascript
复制
const myHandler = jest.fn()

检查它是用..。

代码语言:javascript
复制
expect(myHandler).toHaveBeenCalled()

或者,如果你想检查args..。

代码语言:javascript
复制
expect(myHandler).toHaveBeenCalledWith({some: 'object', or: 'wevs'})

请注意,如果您的代码使Dom更改在useEffect中直接走出大门,您可能必须将您的呈现包装在'act()‘函数中,这个函数也可以从@testing-library/react导入。

代码语言:javascript
复制
let dom: any
await act(() => {
    dom = render(<MyComponent {...myProps} />)
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63403525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档