reactjs - 有没有办法手动触发 Material-UI Modal 关闭

标签 reactjs jestjs material-ui integration-testing react-testing-library

我使用 Popover 组件,它类似于 Modal .
我有这样的测试:

  test('should close popover when clicked two times', () => {
    userEvent.click(targetElem);
    let popover = screen.getByTestId('popover');
    document.body.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', code: 'Escape' }));
  });

我想关闭我的 Popover,但是这段代码不能正常工作。
我如何在 jest, react-testing-library 中测试 popover close case?

最佳答案

假设您有以下带有按钮的简单组件,该按钮在点击时触发 Modal

import React, { useState } from 'react'
import Modal from '@material-ui/core/Modal'

const SimpleModal = () => {
    const [open, setOpen] = useState(false)

    const handleOpen = () => {
        setOpen(true)
    }
    const handleClose = () => {
        setOpen(false)
    }

    return (
        <div>
            <button type="button" onClick={handleOpen}>
                Open Modal
            </button>
            <Modal open={open} onClose={handleClose}>
                <h1>Text in Modal</h1>
            </Modal>
        </div>
    )
}

export default SimpleModal

您可以在模态显示后使用 fireEvent.keyDown 模拟 Escape 键事件,这将关闭模态。

test('should close modal when "Escape" key is pressed', () => {
    render(<SimpleModal />);
    fireEvent.click(screen.getByText('Open Modal'));
    expect(screen.getByText('Text in Modal')).toBeInTheDocument();
    fireEvent.keyDown(screen.getByText('Text in Modal'), {
      key: 'Escape',
      code: 'Escape'
    });
    expect(screen.queryByText('Text in Modal')).not.toBeInTheDocument();
});

关于reactjs - 有没有办法手动触发 Material-UI Modal 关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66177698/

相关文章:

javascript - 是否有可能扩展 Jest/Expect 匹配器

reactjs - 如何使用 Material ui Accordion 的按钮折叠?

css - 如何修复 TypeError : CSS2Properties doesn't have an indexed property setter for '0'

reactjs - 如何将 react 组件作为变量传递给子组件?

javascript - 如何在 React 中分隔输入字段值?

javascript - Puppeteer console.log - 如何查看 JSHandle@object 内部?

javascript - React 测试库 - fireEvent 不会更改输入值

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

reactjs - 如何模拟网络 worker 以在 react 测试库中进行测试?

javascript - 无法将 react 模式呈现为可重用组件