mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-14 18:01:06 +00:00
120 lines
4 KiB
TypeScript
120 lines
4 KiB
TypeScript
import { render, screen } from "@testing-library/svelte";
|
|
import Breadcrumb from "./Breadcrumb.test.svelte";
|
|
import BreadcrumbNoTrailingSlash from "./Breadcrumb.noTrailingSlash.test.svelte";
|
|
import BreadcrumbSkeleton from "./Breadcrumb.skeleton.test.svelte";
|
|
import BreadcrumbDynamic from "./Breadcrumb.dynamic.test.svelte";
|
|
|
|
describe("Breadcrumb", () => {
|
|
it("renders with default props", () => {
|
|
render(Breadcrumb);
|
|
|
|
const nav = screen.getByRole("navigation", { name: "Breadcrumb" });
|
|
expect(nav).toBeInTheDocument();
|
|
|
|
const list = nav.querySelector("ol");
|
|
expect(list).toHaveClass("bx--breadcrumb");
|
|
expect(list).not.toHaveClass("bx--breadcrumb--no-trailing-slash");
|
|
|
|
const items = screen.getAllByRole("listitem");
|
|
expect(items).toHaveLength(3);
|
|
|
|
const links = screen.getAllByRole("link");
|
|
expect(links).toHaveLength(3);
|
|
|
|
expect(links[0]).toHaveTextContent("Dashboard");
|
|
expect(links[0]).toHaveAttribute("href", "/");
|
|
|
|
expect(links[1]).toHaveTextContent("Annual reports");
|
|
expect(links[1]).toHaveAttribute("href", "/reports");
|
|
|
|
expect(links[2]).toHaveTextContent("2019");
|
|
expect(links[2]).toHaveAttribute("href", "/reports/2019");
|
|
expect(items[2]).toHaveClass("bx--breadcrumb-item--current");
|
|
});
|
|
|
|
it("renders with noTrailingSlash", () => {
|
|
render(BreadcrumbNoTrailingSlash);
|
|
|
|
const nav = screen.getByRole("navigation", { name: "Breadcrumb" });
|
|
const list = nav.querySelector("ol");
|
|
expect(list).toHaveClass("bx--breadcrumb--no-trailing-slash");
|
|
|
|
const items = screen.getAllByRole("listitem");
|
|
expect(items).toHaveLength(2);
|
|
|
|
const links = screen.getAllByRole("link");
|
|
expect(links[0]).toHaveTextContent("Home");
|
|
expect(links[0]).toHaveAttribute("href", "/");
|
|
|
|
expect(links[1]).toHaveTextContent("Profile");
|
|
expect(links[1]).toHaveAttribute("href", "/profile");
|
|
expect(items[1]).toHaveClass("bx--breadcrumb-item--current");
|
|
});
|
|
|
|
it("renders skeleton state", () => {
|
|
render(BreadcrumbSkeleton);
|
|
|
|
const skeletons = document.querySelectorAll(".bx--skeleton.bx--breadcrumb");
|
|
expect(skeletons).toHaveLength(2);
|
|
|
|
const firstSkeleton = skeletons[0];
|
|
expect(firstSkeleton).not.toHaveClass("bx--breadcrumb--no-trailing-slash");
|
|
|
|
const firstSkeletonItems = firstSkeleton.querySelectorAll(
|
|
".bx--breadcrumb-item",
|
|
);
|
|
expect(firstSkeletonItems).toHaveLength(3);
|
|
|
|
const secondSkeleton = skeletons[1];
|
|
expect(secondSkeleton).toHaveClass("bx--breadcrumb--no-trailing-slash");
|
|
|
|
const secondSkeletonItems = secondSkeleton.querySelectorAll(
|
|
".bx--breadcrumb-item",
|
|
);
|
|
expect(secondSkeletonItems).toHaveLength(5);
|
|
});
|
|
|
|
it("renders with dynamic items", () => {
|
|
render(BreadcrumbDynamic);
|
|
|
|
const items = screen.getAllByRole("listitem");
|
|
expect(items).toHaveLength(3);
|
|
|
|
const links = screen.getAllByRole("link");
|
|
expect(links[0]).toHaveTextContent("Dashboard");
|
|
expect(links[0]).toHaveAttribute("href", "/");
|
|
|
|
expect(links[1]).toHaveTextContent("Annual reports");
|
|
expect(links[1]).toHaveAttribute("href", "/reports");
|
|
|
|
expect(links[2]).toHaveTextContent("2019");
|
|
expect(links[2]).toHaveAttribute("href", "/reports/2019");
|
|
expect(items[2]).toHaveClass("bx--breadcrumb-item--current");
|
|
});
|
|
|
|
it("updates when dynamic items change", async () => {
|
|
const { rerender } = render(BreadcrumbDynamic);
|
|
|
|
let items = screen.getAllByRole("listitem");
|
|
expect(items).toHaveLength(3);
|
|
|
|
await rerender({
|
|
items: [
|
|
{ href: "/", text: "Home" },
|
|
{ href: "/settings", text: "Settings" },
|
|
],
|
|
});
|
|
|
|
items = screen.getAllByRole("listitem");
|
|
expect(items).toHaveLength(2);
|
|
|
|
const links = screen.getAllByRole("link");
|
|
expect(links[0]).toHaveTextContent("Home");
|
|
expect(links[0]).toHaveAttribute("href", "/");
|
|
|
|
expect(links[1]).toHaveTextContent("Settings");
|
|
expect(links[1]).toHaveAttribute("href", "/settings");
|
|
|
|
expect(items[1]).toHaveClass("bx--breadcrumb-item--current");
|
|
});
|
|
});
|