reactjs - 对 Material UI Select 组件的更改使用react测试库

标签 reactjs material-ui react-testing-library

我正在尝试测试 Select componentonChange 事件使用react-testing-library

我使用 getByTestId 获取元素,效果很好,然后设置元素的值,然后调用 fireEvent.change(select);onChange 永远不会被调用,状态也永远不会更新。

我尝试过使用选择组件本身,也尝试过获取对底层 input 元素的引用,但都不起作用。

有什么解决办法吗?或者这是一个已知问题?

最佳答案

material-ui 的 select 组件使用 mouseDown 事件来触发弹出菜单出现。如果您使用 fireEvent.mouseDown 应该触发弹出窗口,然后您可以在出现的列表框中单击您的选择。请参阅下面的示例。

import React from "react";
import { render, fireEvent, within } from "react-testing-library";
import Select from "@material-ui/core/Select";
import MenuItem from "@material-ui/core/MenuItem";
import Typography from "@material-ui/core/Typography";

it('selects the correct option', () => {
  const {getByRole} = render(
     <>  
       <Select fullWidth value={selectedTab} onChange={onTabChange}>
         <MenuItem value="privacy">Privacy</MenuItem>
         <MenuItem value="my-account">My Account</MenuItem>
       </Select>
       <Typography variant="h1">{/* value set in state */}</Typography>
     </>
  );
  
  fireEvent.mouseDown(getByRole('button'));

  const listbox = within(getByRole('listbox'));

  fireEvent.click(listbox.getByText(/my account/i));

  expect(getByRole('heading')).toHaveTextContent(/my account/i);
});

关于reactjs - 对 Material UI Select 组件的更改使用react测试库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55184037/

相关文章:

css - 带有 svg 圆圈的 Material-UI 单选按钮

reactjs - 使用 Jest 和 react 测试库进行单元测试自定义 Hook

javascript - 组件未更新(react-redux)

javascript - 使用 setState 动态填充对象数组

javascript - React render for 循环运行两次

reactjs - 如何在 React 测试中点击两次相同的位置?

reactjs - 使用 jest 和 react-testing-library 测试对象的属性时出错

javascript - 如何避免 typescript-reactjs 中的 if 语句?

reactjs - 无法访问主题的 Material-ui 中的 pxToRem 函数

reactjs - 将图像插入 Material-UI AppBar