它不起作用,因为 Dialog 组件没有侦听onClick.body上面有一些覆盖类。
<div
class="ms-Modal is-open ms-Dialog root-94"
role="document"
>
<div
aria-hidden="true"
class="ms-Overlay ms-Overlay--dark root-99"
/>
现在的问题是找到一种方法来选择它。不幸的是,在 RTL 中你不能通过它们的 className 来选择元素,所以你需要使用另一个选择器;在这种情况下,我们可以通过角色获取父元素,然后访问第一个子元素。
const onDismiss = jest.fn();
const { getByRole } = render(<App onDismiss={onDismiss} />);
UserEvent.click(screen.getByText("Open Dialog"));
const document = getByRole("document");
UserEvent.click(document.firstChild);
expect(onDismiss).toHaveBeenCalled();
https://codesandbox.io/s/hungry-joliot-tjcph?file=/src/App.spec.js