【问题标题】:How to Test Material-ui RadioGroup button Change with Jest Enzyme如何使用 Jest Enzyme 测试 Material-ui RadioGroup 按钮更改
【发布时间】:2021-01-31 23:49:42
【问题描述】:

如何测试 Material-ui RadioGroup 按钮的变化以及 RadioGroup 道具“值”的后续变化,该值设置为本地状态(useState)值

On change 事件应该触发我模拟过的 handleChange

describe("test", () => {
  test(`radio`, () => {

    const handleChange = jest.fn();
    const component = shallow(
      <App />
    );
    const radioGroup = component.find(`[data-test="colorGroup"]`).at(0);
    const blueRadio = radioGroup.find(`[label="blue"]`).at(0);
    blueRadio.simulate(`click`, { checked: true });

    expect(handleChange.mock.calls.length).toBe(1);
  });
});

应用组件

export const App = () => {
  const [color, setColor] = useState(`default`);

  const handleOnChange = (event) => setColor(event.target.value);
  return (
    <Accordion  elevation={0}>
      <AccordionSummary
        expandIcon={<ExpandMoreIcon />}
        aria-controls="panel1a-content"
        id="panel1a-header"
      >
        <Typography>choose color</Typography>
      </AccordionSummary>
      <AccordionDetails>
        <FormControl component="fieldset">
          <RadioGroup
            row
            onChange={handleOnChange}
            value={color}
            name="position"
            data-test={`colorGroup`}
          >
            <FormControlLabel
              value="default"
              control={<Radio color="primary" />}
  
            />
            <FormControlLabel
              value="blue"
              control={<Radio color="primary" />}
              label="blue"
            />
          </RadioGroup>
        </FormControl>
      </AccordionDetails>
    </Accordion>
  );
};

测试文件在component/home.spect.js https://codesandbox.io/s/sample-testing-in-react-using-jest-and-enzyme-forked-rrrct?fontsize=14&hidenavigation=1&theme=dark

【问题讨论】:

  • 这里有什么问题? simulate 没有触发?

标签: reactjs testing jestjs material-ui enzyme


【解决方案1】:

试试这个方法,

describe("test", () => {
      test(`radio`, () => {
    
        // const handleChange = jest.fn();
        const component = shallow(
          <App />
        );
        const radioGroup = component.find(`[data-test="colorGroup"]`).at(0);
        const blueRadio = radioGroup.find(`[label="blue"]`).at(0);

        expect(radioGroup.props().value).toEqual('default'); //Initial value
        radioGroup.props().onChange({target: {value: true}});
        component.update();

        expect(radioGroup.props().value).toEqual('blue'); //After onChange
      });
    });

如果您仍然面临同样的问题,请告诉我。

【讨论】:

  • 测试返回---- 预期:“蓝色” 接收:“默认”
  • 更新了代码。现在您的更改处理程序将触发
  • 没有仍然返回相同的预期结果codesandbox.io/s/…
猜你喜欢
  • 1970-01-01
  • 2020-05-10
  • 2020-11-28
  • 2021-10-29
  • 2019-07-24
  • 2022-01-05
  • 2018-11-27
  • 1970-01-01
  • 2018-11-09
相关资源
最近更新 更多