reactjs - 使用测试库测试 MUI5 Select

标签 reactjs material-ui react-testing-library user-event

我正在使用 create-react-app 5(带有 React 17、Jest 和测试库)以及 MUI 5。我想测试单击一个简单的 Select菜单,并确保出现菜单选项。我尝试了以下方法:

  it('shows the menu', async () => {
    render(<FormControl fullWidth>
      <InputLabel id="testselect-label">Age</InputLabel>
      <Select
        labelId="testselect-label"
        id="testselect"
        data-testid="testselect"
        label="Age"
        value={10}
      >
        <MenuItem value={10}>Ten</MenuItem>
        <MenuItem value={20}>Twenty</MenuItem>
        <MenuItem value={30}>Thirty</MenuItem>
      </Select>
    </FormControl>);
    const selectButton = screen.getByTestId("testselect");
    userEvent.click(selectButton);
    expect(await screen.findByRole('presentation')).toBeInTheDocument();
  });

但是菜单(其中有 role="presentation" )没有出现,因此测试失败。如果我打电话screen.debug()测试后,它打印“选择”按钮,但不打印菜单。

我已经看过这个question/answer ,我发现 MUI5 的 Select 响应 mouseDown 事件而不是 click 事件。但是userEvent.click两者都发送,所以这不是问题。我也尝试过fireEvent.mouseDown运气不好。

我还尝试了调试器,据我所知,onMouseDown相关 MUI 组件 ( SelectInput ) 的处理程序永远不会被调用。

有人有一个可行的例子吗?

最佳答案

看起来您需要单击按钮元素:

    const selectButton = within(screen.getByTestId('testselect')).getByRole('button');
    userEvent.click(selectButton);

关于reactjs - 使用测试库测试 MUI5 Select,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73833709/

相关文章:

javascript - 新的 react native 元素无法访问

javascript - react-testing-library 或 Cypress - 添加多个 data-testids

javascript - 您可以将 screen.debug() 的结果打印/写入文件吗?

javascript - 如何测试按钮是否被点击?

javascript - 复选框点击后不想勾选或取消勾选

reactjs - React什么时候创建SyntheticEvents?

javascript - webpack错误无法解析 './src'

javascript - ReactJS 和 Material-UI : How to highlight just content inside Material-UI's <Dialog> and not the whole page?

javascript - 梅文本字段。更改图标时,无法点击

reactjs - 如何将输入值从子 Form 组件传递到其父组件的状态以使用 React hooks 提交?