作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的组件包裹在 Material UI Checkbox 周围。我在这里将其剥离到最低限度。
//@flow
import React from "react";
import { Checkbox } from "@material-ui/core";
function MyCheckboxComponent() {
const [checkedState, setCheckedState] = React.useState(true);
const handleChange = event => {
setCheckedState(event.target.checked);
};
return <Checkbox checked={checkedState} onChange={handleChange} />;
}
export default MyCheckboxComponent;
import React from "react";
import Enzyme, { mount } from "enzyme";
import { Checkbox } from "@material-ui/core";
import Adapter from "enzyme-adapter-react-16";
import MyCheckboxComponent from "./MyCheckboxComponent";
Enzyme.configure({ adapter: new Adapter() });
/** Interaction tests testing user interaction with PilzButton */
test("Toggle Checkbox test", () => {
const wrapper = mount(<MyCheckboxComponent />);
const checkBox = wrapper.find(Checkbox);
expect(checkBox).toHaveLength(1);
checkBox.simulate('change', { target: { checked: true } });
expect(checkBox.props().checked).toBe(true);
});
checkBox.simulate('change', { target: { checked: true } });
工作并切换
Checkbox
的值??
最佳答案
最新版本的 enzyme 缓存 find
返回的结果和其他方法。
您需要重新查找并使用.update()
强制刷新状态以重新渲染。
const checkBox = wrapper.find(Checkbox);
expect(checkBox).toHaveLength(1);
checkBox.simulate('change', { target: { checked: true } });
wrapper.update();
expect(wrapper.find(Checkbox).props().checked).toBe(true);
const checkBox = wrapper.find(Checkbox);
expect(checkBox).toHaveLength(1);
expect(checkBox.props().checked).toBe(true);
checkBox.simulate('change', { target: { checked: false } });
wrapper.update();
expect(wrapper.find(Checkbox).props().checked).toBe(false);
onChange
现在可以正常工作。
关于javascript - 如何在 Enzyme/Jest Test 中切换和检查 Material UI 复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61527716/
我是一名优秀的程序员,十分优秀!