reactjs - MouseEnter/MouseOver 不适用于 react-testing-library。如何使用 react-testing-library 测试悬停事件
问题描述
我有一个 ant-design 下拉菜单,其中显示了悬停元素的列表。我想测试下拉菜单中的列表。我正在使用 fireEvent.mouseOver() 但它不起作用。screen.debug() 不显示菜单。如何测试悬停元素?
提前致谢
解决方案
这是我的测试代码。使用 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()
});
});
推荐阅读
- javascript - Socket.io 踢特定用户
- c# - 我如何制作一个计时器来改变他在不同场合运行的滴答数?
- java - Java Runtime.getRuntime exec 复制失败
- javascript - 我想隐藏所有带有标签的元素并包含一个链接
- assembly - 为什么 lea 显然将随机地址移动到 rdi?
- html - 仅当标签文本可用时添加星号
- vb.net - 在文本文件应用程序路径中写入异常
- java - 包含多个 java 类的文件中的静态成员执行顺序
- android - APK 或 Android App Bundle 的版本代码不会在 Flutter 中更改。即使从 pubspec.yaml 更改它
- android - Google Playstore 定价 - 免费还是付费?