【问题标题】:MouseEnter/MouseOver doesn't work with react-testing-library. How to test hover events with react-testing-libraryMouseEnter/MouseOver 不适用于 react-testing-library。如何使用 react-testing-library 测试悬停事件
【发布时间】:2021-02-23 10:43:52
【问题描述】:

我有一个 ant-design 下拉菜单,其中显示了悬停元素的列表。我想测试下拉菜单中的列表。我正在使用 fireEvent.mouseOver() 但它不起作用。 screen.debug() 不显示菜单。如何测试悬停元素?

提前致谢

【问题讨论】:

    标签: reactjs antd react-testing-library


    【解决方案1】:

    这是我的测试代码。 使用 await 并等待菜单出现很重要。

    MyDropdown.tsx

    import React from 'react'
    import { Menu, Dropdown, Button } from 'antd';
    
    const menu = (
      <Menu data-testid="dropdown-menu">
        <Menu.Item>
          <a target="_blank" rel="noopener noreferrer" href="http://www.alipay.com/">
            1st menu item
          </a>
        </Menu.Item>
        <Menu.Item>
          <a target="_blank" rel="noopener noreferrer" href="http://www.taobao.com/">
            2nd menu item
          </a>
        </Menu.Item>
        <Menu.Item>
          <a target="_blank" rel="noopener noreferrer" href="http://www.tmall.com/">
            3rd menu item
          </a>
        </Menu.Item>
      </Menu>
    );
    
    export const MyDropdown: React.FC = () => {
      return(
        <Dropdown overlay={menu} placement="bottomLeft" arrow>
          <Button>bottomLeft</Button>
        </Dropdown>
      )
    }
    

    MyDropdown.test.tsx

    import React from "react";
    import { render, screen, fireEvent, waitFor } from "@testing-library/react";
    import { MyDropdown } from "./MyDropdown";
    
    describe("<MyDropdown />", () => {
        it("check dropdown menu item", async () => {
            render(<MyDropdown />);
    
            fireEvent.mouseOver(screen.getByText('bottomLeft'));
    
            await waitFor(() => screen.getByTestId('dropdown-menu'))
            expect(screen.getByText('1st menu item')).toBeInTheDocument()
            expect(screen.getByText('2nd menu item')).toBeInTheDocument()
            expect(screen.getByText('3rd menu item')).toBeInTheDocument()
        });
    });
    

    【讨论】:

    • 谢谢@rokki。使用异步等待,它工作得很好
    • 我必须使用 mouseEnter 而不是 mouseOver 才能通过测试
    猜你喜欢
    • 1970-01-01
    • 2019-05-21
    • 2019-08-29
    • 2019-11-11
    • 2021-11-30
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    相关资源
    最近更新 更多