import { useContext, useState } from "react"; import { render, screen } from "@testing-library/react"; import { userEvent } from "@testing-library/user-event"; import { DrawerRoot, DrawerContext } from "./DrawerRoot"; describe("DrawerRoot", () => { const TestComponent = () => { const { contentId, open, defaultOpen, zIndex, onOpenChange } = useContext(DrawerContext); return (
Drawer Sub-Component
{open && open}
{defaultOpen && default open}
); }; test("children render visibly into the document", () => { render(Test); expect(screen.getByText("Test")).toBeVisible(); }); test("context passes id", () => { render( ); expect(screen.getByText("Drawer Sub-Component")).toHaveAttribute( "id", "test-id" ); }); test("context passes open prop", () => { render( ); expect(screen.getByText("open")).toBeVisible(); }); test("context passes defaultOpen prop", () => { render( ); expect(screen.getByText("default open")).toBeVisible(); }); test("context passes zIndex prop", () => { render( ); expect(screen.getByText("Drawer Sub-Component")).toHaveStyle("zIndex: 2"); }); test("context sets open change callback and gets called", async () => { const user = userEvent.setup(); const handleChange = jest.fn(); render( ); await user.click(screen.getByRole("button")); expect(handleChange).toHaveBeenCalled(); }); const App = ({ handleChange }) => { const [open] = useState(false); return ( ); }; test("context uses controlled open property", async () => { const user = userEvent.setup(); const handleChange = jest.fn(); render(); await user.click(screen.getByRole("button")); expect(handleChange).toHaveBeenCalled(); }); });