Skip to content

Commit 70a2236

Browse files
committed
Fix shared ui tests
1 parent a97d162 commit 70a2236

File tree

3 files changed

+43
-1
lines changed

3 files changed

+43
-1
lines changed

.changeset/new-bugs-divide.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"nextjs-darkmode": patch
3+
---
4+
5+
Fix: FOUC

packages/shared/vitest.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ export default defineConfig({
88
test: {
99
environment: "jsdom",
1010
globals: true,
11-
setupFiles: [],
11+
setupFiles: ["vitest.setup.ts"],
1212
coverage: {
1313
include: ["src/**"],
1414
exclude: ["src/**/index.ts", "src/**/declaration.d.ts"],

packages/shared/vitest.setup.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { vi } from "vitest";
2+
3+
const mediaListeners: (() => void)[] = [];
4+
// mock matchMedia
5+
Object.defineProperty(window, "matchMedia", {
6+
writable: true,
7+
value: vi.fn().mockImplementation((query: string) => ({
8+
matches: query.includes(window.media),
9+
media: query,
10+
onchange() {
11+
this.matches = query.includes(window.media);
12+
mediaListeners.forEach(listener => listener());
13+
},
14+
addEventListener: (_: string, listener: () => void) => mediaListeners.push(listener),
15+
removeEventListener: (_: string, listener: () => void) =>
16+
mediaListeners.splice(mediaListeners.indexOf(listener), 1),
17+
dispatchEvent: vi.fn(),
18+
})),
19+
});
20+
21+
declare global {
22+
interface Window {
23+
media: "dark" | "light";
24+
}
25+
// skipcq: JS-0102
26+
var cookies: Record<string, { value: string }>; // eslint-disable-line no-var -- let is not supported in defining global due to block scope
27+
}
28+
Object.defineProperty(window, "media", {
29+
writable: true,
30+
value: "dark",
31+
});
32+
33+
globalThis.cookies = {};
34+
35+
vi.mock("next/headers", () => ({
36+
cookies: () => ({ get: (cookieName: string) => globalThis.cookies[cookieName] }),
37+
}));

0 commit comments

Comments
 (0)