diff --git a/tests/Button.test.svelte b/tests/Button.test.svelte
deleted file mode 100644
index 49bdcdbb..00000000
--- a/tests/Button.test.svelte
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tests/Button/Button.test.svelte b/tests/Button/Button.test.svelte
new file mode 100644
index 00000000..755763b6
--- /dev/null
+++ b/tests/Button/Button.test.svelte
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/Button/Button.test.ts b/tests/Button/Button.test.ts
new file mode 100644
index 00000000..63634037
--- /dev/null
+++ b/tests/Button/Button.test.ts
@@ -0,0 +1,109 @@
+import { render, screen } from "@testing-library/svelte";
+import { user } from "../setup-tests";
+import Button from "./Button.test.svelte";
+
+describe("Button", () => {
+ beforeEach(() => {
+ vi.clearAllMocks();
+ });
+
+ it("should render with various kinds", () => {
+ render(Button);
+
+ const kinds = [
+ "primary",
+ "secondary",
+ "tertiary",
+ "ghost",
+ "danger",
+ "danger-tertiary",
+ "danger-ghost",
+ ];
+
+ kinds.forEach((kind) => {
+ const button = screen.getByText(kind);
+ expect(button.closest("button")).toHaveClass(`bx--btn--${kind}`);
+ });
+ });
+
+ it("should render with different sizes", () => {
+ render(Button);
+
+ const sizes = {
+ field: "bx--btn--field",
+ small: "bx--btn--sm",
+ };
+
+ for (const [size, className] of Object.entries(sizes)) {
+ const buttons = screen.getAllByText(new RegExp(`${size}`, "i"));
+ buttons.forEach((button) => {
+ expect(button.closest("button")).toHaveClass(className);
+ });
+ }
+ });
+
+ it("should render icon-only button with tooltip", () => {
+ render(Button);
+
+ const iconButton = screen.getByText("Tooltip text").parentElement;
+ assert(iconButton);
+ expect(iconButton).toHaveClass("bx--btn--icon-only");
+ expect(iconButton).toHaveClass("bx--tooltip__trigger");
+ expect(iconButton).toHaveClass("bx--tooltip--a11y");
+ expect(iconButton).toHaveClass("bx--btn--icon-only--bottom");
+ expect(iconButton).toHaveClass("bx--tooltip--align-center");
+ });
+
+ it("should render as link when href is provided", () => {
+ render(Button);
+
+ const linkButton = screen.getByText("Link button");
+ expect(linkButton.tagName).toBe("A");
+ expect(linkButton).toHaveAttribute("href", "#");
+ });
+
+ it("should render custom element when as prop is used", () => {
+ render(Button);
+
+ const customButton = screen.getByText("Custom element");
+ expect(customButton.tagName).toBe("P");
+ expect(customButton).toHaveClass("bx--btn");
+ });
+
+ it("should render disabled state", () => {
+ render(Button);
+
+ const disabledButton = screen.getByText("Disabled button");
+ expect(disabledButton).toBeDisabled();
+ expect(disabledButton).toHaveClass("bx--btn--disabled");
+ });
+
+ it("should render skeleton state", () => {
+ render(Button);
+
+ const skeletons = document.querySelectorAll(".bx--skeleton");
+ expect(skeletons).toHaveLength(3);
+
+ skeletons.forEach((skeleton) => {
+ expect(skeleton).toHaveClass("bx--btn");
+ });
+ });
+
+ it("should handle click events", async () => {
+ const consoleLog = vi.spyOn(console, "log");
+ render(Button);
+
+ const button = screen.getByTestId("btn");
+ await user.click(button);
+ expect(consoleLog).toHaveBeenCalledWith("click");
+ expect(consoleLog).toHaveBeenCalledTimes(1);
+ });
+
+ it("should render with icon", () => {
+ render(Button);
+
+ const buttonWithIcon = screen.getByText("With icon");
+ const icon = buttonWithIcon.querySelector(".bx--btn__icon");
+ expect(icon).toBeInTheDocument();
+ });
+});