| 123456789101112131415161718192021222324252627282930313233343536 |
- import { render, screen } from "@testing-library/react";
- import userEvent from "@testing-library/user-event";
- import { expect, test, vi } from "vitest";
- import { useClickOutsideElement } from "#/hooks/useClickOutsideElement";
- interface ClickOutsideTestComponentProps {
- callback: () => void;
- }
- function ClickOutsideTestComponent({
- callback,
- }: ClickOutsideTestComponentProps) {
- const ref = useClickOutsideElement<HTMLDivElement>(callback);
- return (
- <div>
- <div data-testid="inside-element" ref={ref} />
- <div data-testid="outside-element" />
- </div>
- );
- }
- test("call the callback when the element is clicked outside", async () => {
- const user = userEvent.setup();
- const callback = vi.fn();
- render(<ClickOutsideTestComponent callback={callback} />);
- 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();
- });
|