У меня есть простой пример Material-UI ListItem
, на который я наведу курсор мыши, и Material-UI Popper
, содержащий еще один ListItem
, затем появляется на событии 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);
});
});