如何使用 React 测试库来模拟点击 Material UI RadioGroup 选项?

How can I use React Testing Library to simulate clicking on Material UI RadioGroup option?

如何编写反应测试库测试脚本来验证单击 Material UI 单选按钮?以下是我遇到的问题的再现。

import React from 'react';
import Radio from '@material-ui/core/Radio';
import RadioGroup from '@material-ui/core/RadioGroup';
import FormControlLabel from '@material-ui/core/FormControlLabel';
import FormControl from '@material-ui/core/FormControl';
import FormLabel from '@material-ui/core/FormLabel';

export default function RadioButtonsGroup() {
  const [value, setValue] = React.useState('female');

  const handleChange = (event) => {
    setValue(event.target.value);
  };

  return (
    <FormControl component="fieldset">
      <FormLabel component="legend">Gender</FormLabel>
      <RadioGroup aria-label="gender" name="gender1" value={value} onChange={handleChange}>
        <FormControlLabel value="female" control={<Radio />} label="Female" />
        <FormControlLabel value="male" control={<Radio />} label="Male" />
        <FormControlLabel value="other" control={<Radio />} label="Other" />
        <FormControlLabel value="disabled" disabled control={<Radio />} label="(Disabled option)" />
      </RadioGroup>
    </FormControl>
  );
}

和测试

import { render, screen, fireEvent } from "@testing-library/react";
import RadioButtonsGroup from "./demo";

test("can click Male radio option", () => {
  render(<RadioButtonsGroup />);
  const maleLabel = screen.getByLabelText(/Male/);
  fireEvent.click(maleLabel);
  expect(maleLabel).toBeChecked();
});


嘿 - 按角色获取应该可以帮助你。尝试:

const button = screen.getByRole("radio", { name: "Male" });

这样您就可以访问标签为 Male 的单选按钮。

那你可以做

 const leftClick = { button: 0 };

 userEvent.click(button, leftClick);

 expect(button.checked).toBe(true);

不过我发现的一件事是 .checked 属性 不能很好地与 Typescript 一起使用,所以如果你正在编写 typescript,你可能会收到关于 .checked 的警告不存在