Files
twitch-panels/tests/unit/components/ui/RangeSlider.test.ts
T

62 lines
1.7 KiB
TypeScript

import { render, screen, fireEvent } from "@testing-library/svelte";
import { describe, expect, it, vi } from "vitest";
import RangeSlider from "$components/ui/RangeSlider.svelte";
describe("RangeSlider.svelte", () => {
it("should render with default props", () => {
const { container } = render(RangeSlider, {
props: {
value: 50,
},
});
const slider = container.querySelector(".slider");
expect(slider).toBeInTheDocument();
expect(screen.getByText("50")).toBeInTheDocument();
});
it("should render with custom min, max, step", () => {
const { container } = render(RangeSlider, {
props: {
value: 25,
min: 0,
max: 50,
step: 5,
},
});
const slider = container.querySelector(".slider");
expect(slider).toHaveAttribute("min", "0");
expect(slider).toHaveAttribute("max", "50");
expect(slider).toHaveAttribute("step", "5");
});
it("should update value on change", async () => {
const { container } = render(RangeSlider, {
props: {
value: 50,
},
});
const slider = container.querySelector(".slider");
await fireEvent.input(slider, { target: { value: "75" } });
expect(screen.getByText("75")).toBeInTheDocument();
});
it("should call onchange handler", async () => {
const onchange = vi.fn();
const { container } = render(RangeSlider, {
props: {
value: 50,
onchange,
},
});
const slider = container.querySelector(".slider");
await fireEvent.change(slider, { target: { value: "75" } });
expect(onchange).toHaveBeenCalled();
});
});