【问题标题】:Is there a way to trigger Material-UI Modal close manually有没有办法手动触发 Material-UI Modal 关闭
【发布时间】:2021-02-12 19:08:56
【问题描述】:

我使用 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 关闭案例?

【问题讨论】:

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


    【解决方案1】:

    假设您有以下简单组件,其中包含一个在点击时触发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();
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2021-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      相关资源
      最近更新 更多