Add Description tests
This commit is contained in:
106
src/lib/components/description/description.test.ts
vendored
Normal file
106
src/lib/components/description/description.test.ts
vendored
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
import DescriptionProvider from "./DescriptionProvider.svelte";
|
||||||
|
import Description from "./Description.svelte";
|
||||||
|
import svelte from "svelte-inline-compile";
|
||||||
|
import { render } from "@testing-library/svelte";
|
||||||
|
|
||||||
|
let mockId = 0;
|
||||||
|
jest.mock("../../hooks/use-id", () => {
|
||||||
|
return {
|
||||||
|
useId: jest.fn(() => ++mockId),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => (mockId = 0));
|
||||||
|
beforeAll(() => {
|
||||||
|
// jest.spyOn(window, 'requestAnimationFrame').mockImplementation(setImmediate as any)
|
||||||
|
// jest.spyOn(window, 'cancelAnimationFrame').mockImplementation(clearImmediate as any)
|
||||||
|
});
|
||||||
|
afterAll(() => jest.restoreAllMocks());
|
||||||
|
|
||||||
|
it("should be possible to render a DescriptionProvider", () => {
|
||||||
|
render(DescriptionProvider, { name: "test" });
|
||||||
|
// This dumb line is to trick the TS compiler to not remove my imports
|
||||||
|
expect(DescriptionProvider).not.toBe(Description);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should be possible to use a DescriptionProvider without using a Description", async () => {
|
||||||
|
let { container } = render(svelte`
|
||||||
|
<DescriptionProvider name={"test"} let:describedby>
|
||||||
|
<div aria-describedby={describedby}>
|
||||||
|
No description
|
||||||
|
</div>
|
||||||
|
</DescriptionProvider>
|
||||||
|
`);
|
||||||
|
|
||||||
|
expect(container.firstChild?.firstChild).toMatchInlineSnapshot(`
|
||||||
|
<div>
|
||||||
|
No description
|
||||||
|
</div>
|
||||||
|
`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should be possible to use a DescriptionProvider and a single Description, and have them linked", async () => {
|
||||||
|
let { container } = render(svelte`
|
||||||
|
<DescriptionProvider name={"test"} let:describedby>
|
||||||
|
<div aria-describedby={describedby}>
|
||||||
|
<Description>I am a description</Description>
|
||||||
|
<span>Contents</span>
|
||||||
|
</div>
|
||||||
|
</DescriptionProvider>
|
||||||
|
`);
|
||||||
|
|
||||||
|
expect(container.firstChild?.firstChild).toMatchInlineSnapshot(`
|
||||||
|
<div
|
||||||
|
aria-describedby="headlessui-description-1"
|
||||||
|
>
|
||||||
|
<p
|
||||||
|
id="headlessui-description-1"
|
||||||
|
>
|
||||||
|
I am a description
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<span>
|
||||||
|
Contents
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should be possible to use a DescriptionProvider and multiple Description components, and have them linked", async () => {
|
||||||
|
let { container } = render(svelte`
|
||||||
|
<DescriptionProvider name={"test"} let:describedby>
|
||||||
|
<div aria-describedby={describedby}>
|
||||||
|
<Description>I am a description</Description>
|
||||||
|
<span>Contents</span>
|
||||||
|
<Description>I am also a description</Description>
|
||||||
|
</div>
|
||||||
|
</DescriptionProvider>
|
||||||
|
`);
|
||||||
|
expect(container.firstChild?.firstChild).toMatchInlineSnapshot(`
|
||||||
|
<div
|
||||||
|
aria-describedby="headlessui-description-1 headlessui-description-2"
|
||||||
|
>
|
||||||
|
<p
|
||||||
|
id="headlessui-description-1"
|
||||||
|
>
|
||||||
|
I am a description
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<span>
|
||||||
|
Contents
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<p
|
||||||
|
id="headlessui-description-2"
|
||||||
|
>
|
||||||
|
I am also a description
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
`);
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user