diff --git a/test/Match.test.tsx b/test/Match.test.tsx new file mode 100644 index 0000000..037b8da --- /dev/null +++ b/test/Match.test.tsx @@ -0,0 +1,46 @@ +import { fireEvent, render, screen } from "@testing-library/react"; +import { useState } from "react"; +import { describe, expect, test } from "vitest"; +import { Match } from "../src/components/Match"; + +describe("Match", () => { + test("renders children when when is truthy", () => { + render(matched); + + expect(screen.getByText("matched")).toBeInTheDocument(); + }); + + test("renders nothing when when is falsy", () => { + const { container } = render(matched); + + expect(screen.queryByText("matched")).not.toBeInTheDocument(); + expect(container.firstChild).toBeNull(); + }); + + test("updates when the condition state changes", () => { + function Harness() { + const [active, setActive] = useState(false); + + return ( + <> + + visible + + ); + } + + render(); + + expect(screen.queryByText("visible")).not.toBeInTheDocument(); + + fireEvent.click(screen.getByRole("button", { name: "toggle" })); + + expect(screen.getByText("visible")).toBeInTheDocument(); + + fireEvent.click(screen.getByRole("button", { name: "toggle" })); + + expect(screen.queryByText("visible")).not.toBeInTheDocument(); + }); +});