【发布时间】:2020-06-08 08:28:01
【问题描述】:
我有一个 Material-ui ListItem 的简单示例,我将鼠标悬停在它上面,然后一个包含另一个 ListItem 的 material-ui Popper 然后出现在 onMouseOver 事件上。这工作正常,但我无法复制相关 Jest/Enzyme 测试中的行为。
在此处减少测试失败的示例。
组件片段
export default function MyPopoutMenu() {
const [popoverAnchorElement, setPopoverAnchorElement] = useState(null);
const handleMouseEnter = event => {
console.log("onMouseEnter - " + event.currentTarget.textContent);
setPopoverAnchorElement(event.currentTarget);
};
const handleClose = (event, index) => {
console.log("closing");
setPopoverAnchorElement(null);
};
let isPopoverOpen = Boolean(popoverAnchorElement);
return (
<div className="App">
<List style={{ maxWidth: "250px" }}>
<ListItem button>
<ListItemIcon>
<FolderIcon />
</ListItemIcon>
<ListItemText onMouseEnter={handleMouseEnter}>
Hover on me
</ListItemText>
</ListItem>
</List>
<Popper
open={isPopoverOpen}
onClose={handleClose}
anchorEl={popoverAnchorElement}
className="popper-item"
>
<ListItem button>
<ListItemIcon>
<KeyboardArrowRightIcon />
</ListItemIcon>
<ListItemText>I Appear</ListItemText>
</ListItem>
</Popper>
</div>
);
}
测试片段
/** Interaction tests testing user interaction with PilzButton */
test("Check that popover appears on hover", () => {
const wrapper = mount(<MyPopoutMenu />);
console.log("wrapper DEBUG - " + wrapper.debug());
//1. Find the menu item to hover on
const foundListItem = wrapper
.find(".MuiListItemText-root")
.filterWhere(item => item.contains("Hover on me"));
expect(foundListItem).toHaveLength(1);
//2. Hover on the item
foundListItem.prop("onMouseEnter")({
currentTarget: {
textContent: "Hover on me"
}
});
act(() => {
//Now try to find the Popover
const foundPopoverListItem = wrapper
.find(".MuiListItemText-root")
.filterWhere(item => item.contains("I Appear"));
expect(foundPopoverListItem).toHaveLength(1);
});
});
【问题讨论】:
-
将其更改为
foundListItem.simulate("mouseenter");会发生什么? -
同样的事情发生了:(
标签: javascript jestjs material-ui dom-events enzyme