import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { expect, test, vi } from "vitest"; import { useClickOutsideElement } from "#/hooks/use-click-outside-element"; interface ClickOutsideTestComponentProps { callback: () => void; } function ClickOutsideTestComponent({ callback, }: ClickOutsideTestComponentProps) { const ref = useClickOutsideElement(callback); return (
); } test("call the callback when the element is clicked outside", async () => { const user = userEvent.setup(); const callback = vi.fn(); render(); const insideElement = screen.getByTestId("inside-element"); const outsideElement = screen.getByTestId("outside-element"); await user.click(insideElement); expect(callback).not.toHaveBeenCalled(); await user.click(outsideElement); expect(callback).toHaveBeenCalled(); });