import { test, expect } from 'vitest';
import { render, screen, within } from '@testing-library/react';
import Breadcrumbs from './Breadcrumbs';
const LINK_HREF = '#home';
const LINK_TEXT = 'Home';
test('breadcrumbs render correctly', () => {
render(
Home
Category
Page
);
const nav = screen.getByRole('navigation');
const list = within(nav).getByRole('list');
// check nav
expect(nav).toHaveAttribute('aria-label', 'Breadcrumb');
// check list
expect(list.tagName).toEqual('OL');
expect(list).toHaveClass('ds_breadcrumbs');
});
test('passing additional props to breadcrumbs', () => {
render(
);
const nav = screen.getByRole('navigation');
expect(nav.dataset.test).toEqual('foo');
});
test('passing additional CSS classes to breadcrumbs', () => {
render(
);
const nav = screen.getByRole('navigation');
expect(nav).toHaveClass('foo');
});
test('breadcrumb item with link', () => {
render(
{LINK_TEXT}
);
const item = screen.getByRole('listitem');
const link = within(item).getByRole('link');
expect(item).toHaveClass('ds_breadcrumbs__item');
expect(item?.tagName).toEqual('LI');
expect(link).toHaveClass('ds_breadcrumbs__link');
expect(link).toHaveAttribute('href', LINK_HREF);
expect(link?.tagName).toEqual('A');
expect(link?.textContent).toEqual(LINK_TEXT);
});
test('breadcrumb item without link', () => {
render(
{LINK_TEXT}
);
const item = screen.getByRole('listitem');
const link = within(item).queryByRole('link');
expect(item).toHaveClass('ds_breadcrumbs__item');
expect(item?.tagName).toEqual('LI');
expect(item?.textContent).toEqual(LINK_TEXT);
expect(link).not.toBeInTheDocument();
});
test('hidden breadcrumb item', () => {
render(
{LINK_TEXT}
);
const item = screen.getByRole('listitem');
expect(item).toHaveClass('visually-hidden');
});
test('renders breadcrumb with custom element', () => {
render(
(
)}>
{LINK_TEXT}
);
const item = screen.getByRole('listitem');
const link = within(item).queryByRole('link');
expect(link?.tagName).toEqual('SPAN');
expect(link?.textContent).toEqual(LINK_TEXT);
});
test('passing additional props to breadcrumb item', () => {
render(
);
const nav = screen.getByRole('listitem');
expect(nav.dataset.test).toEqual('foo');
});
test('passing additional CSS classes to breadcrumb item', () => {
render(
);
const nav = screen.getByRole('listitem');
expect(nav).toHaveClass('foo');
});