import "@testing-library/jest-dom";
import { fireEvent, render, screen } from "@testing-library/react";
import MenuItem from "./MenuItem";
describe("MenuItem", () => {
test("renders an external link correctly", () => {
render(
,
);
const linkElement = screen.getByText("External Link");
expect(linkElement).toBeInTheDocument();
expect(linkElement).toHaveAttribute("href", "http://example.com");
expect(linkElement).toHaveAttribute("target", "_blank");
expect(linkElement).toHaveAttribute("rel", "noopener noreferrer");
});
test("renders an internal link correctly", () => {
const MockLink = ({
children,
...props
}: React.AnchorHTMLAttributes & {
children?: React.ReactNode;
}) => {children};
render(
,
);
const linkElement = screen.getByText("Internal Link");
expect(linkElement).toBeInTheDocument();
expect(linkElement).toHaveAttribute("href", "/internal");
});
test("renders a button with onClick handler correctly", () => {
const handleClick = vi.fn();
render(
,
);
const buttonElement = screen.getByText("Button");
expect(buttonElement).toBeInTheDocument();
fireEvent.click(buttonElement);
expect(handleClick).toHaveBeenCalledTimes(1);
});
test("toggles menu on mobile when link is clicked", () => {
const toggleMenu = vi.fn();
render(
,
);
const linkElement = screen.getByText("Mobile Link");
fireEvent.click(linkElement);
expect(toggleMenu).toHaveBeenCalledTimes(1);
});
});