From 3fc1d750fd0e8cf77a1b42e69caa74083b3d54dd Mon Sep 17 00:00:00 2001 From: Florian Kostenzer Date: Tue, 14 Jul 2026 06:21:40 +0200 Subject: [PATCH] test: use extends: true for Vitest projects, guard clipboard spy target --- src/lib/components/CopyButton.svelte.test.ts | 13 ++++++++++++- vite.config.ts | 4 ++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/lib/components/CopyButton.svelte.test.ts b/src/lib/components/CopyButton.svelte.test.ts index 7ceb0a8e..fde21f68 100644 --- a/src/lib/components/CopyButton.svelte.test.ts +++ b/src/lib/components/CopyButton.svelte.test.ts @@ -1,4 +1,4 @@ -import { beforeEach, describe, expect, it, vi } from "vitest"; +import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { render } from "vitest-browser-svelte"; import CopyButton from "./CopyButton.svelte"; @@ -6,6 +6,17 @@ import CopyButton from "./CopyButton.svelte"; // grant clipboard-read permission, and the component's contract is "calls // navigator.clipboard.writeText and flips to the copied state". describe("CopyButton", () => { + beforeAll(() => { + // navigator.clipboard only exists in secure contexts; provide a minimal + // stand-in when absent so the spies below always have a target. + if (!("clipboard" in navigator)) { + Object.defineProperty(navigator, "clipboard", { + value: { writeText: async () => {} }, + configurable: true, + }); + } + }); + beforeEach(() => { vi.restoreAllMocks(); }); diff --git a/vite.config.ts b/vite.config.ts index 24d8a717..6f556618 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -62,7 +62,7 @@ export default defineConfig(({ mode }) => { test: { projects: [ { - extends: "./vite.config.ts", + extends: true, test: { name: "server", environment: "node", @@ -71,7 +71,7 @@ export default defineConfig(({ mode }) => { }, }, { - extends: "./vite.config.ts", + extends: true, // Pre-bundle the component-test dependency graph: on a cold Vite cache // (every CI runner) a mid-run dep-optimization reload can flake the suite. optimizeDeps: {