Skip to content

Commit a97d162

Browse files
committed
Update tests
1 parent 27683ba commit a97d162

File tree

3 files changed

+19
-7
lines changed

3 files changed

+19
-7
lines changed

lib/src/client/core/core.test.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import { act, cleanup, fireEvent, render, renderHook } from "@testing-library/react";
22
import { afterEach, beforeEach, describe, test } from "vitest";
3-
import { ServerTarget } from "../../server";
43
import { Core } from "./core";
54
import { useMode } from "../../hooks";
6-
import { COOKIE_KEY, DARK, LIGHT, SYSTEM } from "../../constants";
5+
import { COOKIE_KEY, DARK, LIGHT, MEDIA } from "../../constants";
76

87
describe("theme-switcher", () => {
98
afterEach(cleanup);
@@ -35,5 +34,13 @@ describe("theme-switcher", () => {
3534
expect(hook.result.current.mode).toBe(DARK);
3635
});
3736

38-
test.todo("test media change event -- not supported by fireEvent");
37+
test("test media change event", async ({ expect }) => {
38+
const hook = renderHook(() => useMode());
39+
await act(() => {
40+
// globalThis.window.media = LIGHT as ResolvedScheme;
41+
// @ts-expect-error -- ok
42+
matchMedia(MEDIA).onchange?.();
43+
});
44+
expect(hook.result.current.mode).toBe(DARK);
45+
});
3946
});

lib/src/utils.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ const DEFAULT_STORE_VAL: Store = {
1717
export const useStore = () =>
1818
useRGS<Store>("ndm", () =>
1919
typeof localStorage === "undefined"
20-
? DEFAULT_STORE_VAL
20+
? /* v8 ignore next */
21+
DEFAULT_STORE_VAL
2122
: {
2223
m: (localStorage.getItem(COOKIE_KEY) ?? SYSTEM) as ColorSchemePreference,
2324
s: (matchMedia(MEDIA).matches ? DARK : LIGHT) as ResolvedScheme,

lib/vitest.setup.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,13 @@ Object.defineProperty(window, "matchMedia", {
77
value: vi.fn().mockImplementation((query: string) => ({
88
matches: query.includes(window.media),
99
media: query,
10-
onchange: () => mediaListeners.forEach(listener => listener()),
11-
addEventListener: (listener: () => void) => mediaListeners.push(listener),
12-
removeEventListener: vi.fn(),
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),
1317
dispatchEvent: vi.fn(),
1418
})),
1519
});

0 commit comments

Comments
 (0)