Skip to content

Commit 15d4dfb

Browse files
committed
fix vitest hook mocks
1 parent 6c41bf3 commit 15d4dfb

3 files changed

Lines changed: 82 additions & 26 deletions

File tree

src/components/JobList.test.tsx

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,34 @@
11
import { FeaturesContext } from "@contexts/Features";
2-
import { useSettings } from "@hooks/use-settings";
32
import { JobState } from "@services/types";
43
import { jobMinimalFactory } from "@test/factories/job";
54
import { createFeatures } from "@test/utils/features";
65
import { render, screen } from "@testing-library/react";
7-
import { describe, expect, it, vi } from "vitest";
6+
import { type ReactNode } from "react";
7+
import {
8+
beforeEach,
9+
describe,
10+
expect,
11+
it,
12+
type MockedFunction,
13+
vi,
14+
} from "vitest";
815

916
import JobList from "./JobList";
1017

18+
type UseSettings = typeof import("@hooks/use-settings").useSettings;
19+
20+
const { mockUseSettings } = vi.hoisted(() => ({
21+
mockUseSettings: vi.fn() as MockedFunction<UseSettings>,
22+
}));
23+
1124
vi.mock("@tanstack/react-router", () => {
1225
return {
1326
Link: ({
1427
children,
1528
className,
1629
to,
1730
}: {
18-
children: React.ReactNode;
31+
children: ReactNode;
1932
className: string;
2033
to: string;
2134
}) => (
@@ -28,18 +41,22 @@ vi.mock("@tanstack/react-router", () => {
2841

2942
// Mock the useSettings hook
3043
vi.mock("@hooks/use-settings", () => ({
31-
useSettings: vi.fn(),
44+
useSettings: mockUseSettings,
3245
}));
3346

3447
describe("JobList", () => {
48+
beforeEach(() => {
49+
mockUseSettings.mockReset();
50+
});
51+
3552
it("shows job args by default", () => {
3653
const job = jobMinimalFactory.build();
3754
const features = createFeatures({
3855
jobListHideArgsByDefault: false,
3956
});
4057

4158
// Mock settings with no override
42-
(useSettings as unknown as ReturnType<typeof vi.fn>).mockReturnValue({
59+
mockUseSettings.mockReturnValue({
4360
settings: {},
4461
});
4562

@@ -71,7 +88,7 @@ describe("JobList", () => {
7188
});
7289

7390
// Mock settings with no override
74-
(useSettings as unknown as ReturnType<typeof vi.fn>).mockReturnValue({
91+
mockUseSettings.mockReturnValue({
7592
settings: {},
7693
});
7794

@@ -105,7 +122,7 @@ describe("JobList", () => {
105122
});
106123

107124
// Mock settings with override to show args
108-
(useSettings as unknown as ReturnType<typeof vi.fn>).mockReturnValue({
125+
mockUseSettings.mockReturnValue({
109126
settings: { showJobArgs: true },
110127
});
111128

@@ -138,7 +155,7 @@ describe("JobList", () => {
138155
});
139156

140157
// Mock settings with override to hide args
141-
(useSettings as unknown as ReturnType<typeof vi.fn>).mockReturnValue({
158+
mockUseSettings.mockReturnValue({
142159
settings: { showJobArgs: false },
143160
});
144161

src/components/SettingsPage.test.tsx

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,53 @@
1-
import { useFeatures } from "@contexts/Features.hook";
2-
import { useSettings } from "@hooks/use-settings";
31
import { createFeatures } from "@test/utils/features";
42
import { fireEvent, render, screen } from "@testing-library/react";
5-
import { describe, expect, it, vi } from "vitest";
3+
import {
4+
beforeEach,
5+
describe,
6+
expect,
7+
it,
8+
type MockedFunction,
9+
vi,
10+
} from "vitest";
611

712
import SettingsPage from "./SettingsPage";
813

14+
type UseFeatures = typeof import("@contexts/Features.hook").useFeatures;
15+
type UseSettings = typeof import("@hooks/use-settings").useSettings;
16+
17+
const { mockUseFeatures, mockUseSettings } = vi.hoisted(() => ({
18+
mockUseFeatures: vi.fn() as MockedFunction<UseFeatures>,
19+
mockUseSettings: vi.fn() as MockedFunction<UseSettings>,
20+
}));
21+
922
// Mock useSettings hook
1023
vi.mock("@hooks/use-settings", () => ({
11-
useSettings: vi.fn(),
24+
useSettings: mockUseSettings,
1225
}));
1326

1427
// Mock useFeatures hook
1528
vi.mock("@contexts/Features.hook", () => ({
16-
useFeatures: vi.fn(),
29+
useFeatures: mockUseFeatures,
1730
}));
1831

1932
describe("SettingsPage", () => {
33+
beforeEach(() => {
34+
mockUseFeatures.mockReset();
35+
mockUseSettings.mockReset();
36+
});
37+
2038
it("renders correctly with default settings", () => {
2139
// Mock settings hook
2240
const mockSetShowJobArgs = vi.fn();
2341
const mockClearShowJobArgs = vi.fn();
24-
(useSettings as unknown as ReturnType<typeof vi.fn>).mockReturnValue({
42+
mockUseSettings.mockReturnValue({
2543
clearShowJobArgs: mockClearShowJobArgs,
2644
setShowJobArgs: mockSetShowJobArgs,
2745
settings: {},
2846
shouldShowJobArgs: true,
2947
});
3048

3149
// Mock features
32-
(useFeatures as unknown as ReturnType<typeof vi.fn>).mockReturnValue({
50+
mockUseFeatures.mockReturnValue({
3351
features: createFeatures({
3452
jobListHideArgsByDefault: false,
3553
}),
@@ -61,15 +79,15 @@ describe("SettingsPage", () => {
6179
// Mock settings hook with override
6280
const mockSetShowJobArgs = vi.fn();
6381
const mockClearShowJobArgs = vi.fn();
64-
(useSettings as unknown as ReturnType<typeof vi.fn>).mockReturnValue({
82+
mockUseSettings.mockReturnValue({
6583
clearShowJobArgs: mockClearShowJobArgs,
6684
setShowJobArgs: mockSetShowJobArgs,
6785
settings: { showJobArgs: true },
6886
shouldShowJobArgs: true,
6987
});
7088

7189
// Mock features
72-
(useFeatures as unknown as ReturnType<typeof vi.fn>).mockReturnValue({
90+
mockUseFeatures.mockReturnValue({
7391
features: createFeatures({
7492
jobListHideArgsByDefault: true,
7593
}),
@@ -96,15 +114,15 @@ describe("SettingsPage", () => {
96114
// Mock settings hook
97115
const mockSetShowJobArgs = vi.fn();
98116
const mockClearShowJobArgs = vi.fn();
99-
(useSettings as unknown as ReturnType<typeof vi.fn>).mockReturnValue({
117+
mockUseSettings.mockReturnValue({
100118
clearShowJobArgs: mockClearShowJobArgs,
101119
setShowJobArgs: mockSetShowJobArgs,
102120
settings: {},
103121
shouldShowJobArgs: false,
104122
});
105123

106124
// Mock features
107-
(useFeatures as unknown as ReturnType<typeof vi.fn>).mockReturnValue({
125+
mockUseFeatures.mockReturnValue({
108126
features: createFeatures({
109127
jobListHideArgsByDefault: true,
110128
}),

src/hooks/use-settings.test.tsx

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,46 @@
1-
import { useFeatures } from "@contexts/Features.hook";
21
import { $userSettings } from "@stores/settings";
32
import { createFeatures } from "@test/utils/features";
43
import { renderHook } from "@testing-library/react";
5-
import { describe, expect, it, vi } from "vitest";
4+
import {
5+
beforeEach,
6+
describe,
7+
expect,
8+
it,
9+
type MockedFunction,
10+
vi,
11+
} from "vitest";
612

713
import { useSettings } from "./use-settings";
814

15+
type UseFeatures = typeof import("@contexts/Features.hook").useFeatures;
16+
type UseStore = typeof import("@nanostores/react").useStore;
17+
18+
const { mockUseFeatures, mockUseStore } = vi.hoisted(() => ({
19+
mockUseFeatures: vi.fn() as MockedFunction<UseFeatures>,
20+
mockUseStore: vi.fn() as MockedFunction<UseStore>,
21+
}));
22+
923
// Mock nanostores/react
1024
vi.mock("@nanostores/react", () => ({
11-
useStore: vi.fn().mockImplementation((store) => store.get()),
25+
useStore: mockUseStore,
1226
}));
1327

1428
// Mock Features context
1529
vi.mock("@contexts/Features.hook", () => ({
16-
useFeatures: vi.fn(),
30+
useFeatures: mockUseFeatures,
1731
}));
1832

1933
describe("useSettings", () => {
34+
beforeEach(() => {
35+
vi.restoreAllMocks();
36+
mockUseFeatures.mockReset();
37+
mockUseStore.mockReset();
38+
mockUseStore.mockImplementation((store) => store.get());
39+
});
40+
2041
it("should return default show job args value when no override", () => {
2142
// Mock Features hook
22-
(useFeatures as unknown as ReturnType<typeof vi.fn>).mockReturnValue({
43+
mockUseFeatures.mockReturnValue({
2344
features: createFeatures({
2445
jobListHideArgsByDefault: true,
2546
}),
@@ -34,7 +55,7 @@ describe("useSettings", () => {
3455

3556
it("should return override when set to true", () => {
3657
// Mock Features hook with hide args by default
37-
(useFeatures as unknown as ReturnType<typeof vi.fn>).mockReturnValue({
58+
mockUseFeatures.mockReturnValue({
3859
features: createFeatures({
3960
jobListHideArgsByDefault: true,
4061
}),
@@ -49,7 +70,7 @@ describe("useSettings", () => {
4970

5071
it("should return override when set to false", () => {
5172
// Mock Features hook with show args by default
52-
(useFeatures as unknown as ReturnType<typeof vi.fn>).mockReturnValue({
73+
mockUseFeatures.mockReturnValue({
5374
features: createFeatures({
5475
jobListHideArgsByDefault: false,
5576
}),

0 commit comments

Comments
 (0)