使用 Jest 和 Enzyme 测试 Material-UI 的 RadioGroup
组件的变化可以通过模拟用户交互来实现。以下是一个示例,展示如何设置和测试 RadioGroup
的变化。
确保你已经安装了必要的依赖项:
npm install --save-dev jest enzyme enzyme-adapter-react-16 @material-ui/core
RadioGroup
组件首先,我们创建一个简单的 RadioGroup
组件,供测试使用:
// RadioGroupComponent.js
import React, { useState } from 'react';
import { RadioGroup, FormControlLabel, Radio } from '@material-ui/core';
const RadioGroupComponent = () => {
const [value, setValue] = useState('option1');
const handleChange = (event) => {
setValue(event.target.value);
};
return (
<RadioGroup value={value} onChange={handleChange}>
<FormControlLabel value="option1" control={<Radio />} label="Option 1" />
<FormControlLabel value="option2" control={<Radio />} label="Option 2" />
<FormControlLabel value="option3" control={<Radio />} label="Option 3" />
</RadioGroup>
);
};
export default RadioGroupComponent;
接下来,我们编写测试来验证 RadioGroup
的变化。我们将使用 Enzyme 来模拟用户的选择。
// RadioGroupComponent.test.js
import React from 'react';
import { shallow } from 'enzyme';
import RadioGroupComponent from './RadioGroupComponent';
import { Radio } from '@material-ui/core';
describe('RadioGroupComponent', () => {
let wrapper;
beforeEach(() => {
wrapper = shallow(<RadioGroupComponent />);
});
it('should render the RadioGroup with default value', () => {
expect(wrapper.find(Radio).at(0).props().checked).toBe(true); // Option 1 is checked by default
expect(wrapper.find(Radio).at(1).props().checked).toBe(false); // Option 2 is not checked
expect(wrapper.find(Radio).at(2).props().checked).toBe(false); // Option 3 is not checked
});
it('should change the value when a different radio button is selected', () => {
// Simulate selecting Option 2
wrapper.find(Radio).at(1).simulate('change', { target: { value: 'option2' } });
// Update the wrapper to reflect the new state
wrapper.update();
expect(wrapper.find(Radio).at(0).props().checked).toBe(false); // Option 1 is not checked
expect(wrapper.find(Radio).at(1).props().checked).toBe(true); // Option 2 is checked
expect(wrapper.find(Radio).at(2).props().checked).toBe(false); // Option 3 is not checked
});
});
确保你的测试环境已正确配置,然后运行测试:
npm test
RadioGroupComponent
是一个简单的组件,包含一个 RadioGroup
和几个 FormControlLabel
组件。它使用 useState
来管理选中的值。shallow
方法来渲染组件。领取专属 10元无门槛券
手把手带您无忧上云