From 923f0c0c220215806e1b3f153e74d66af4487225 Mon Sep 17 00:00:00 2001 From: Pouzor Date: Sat, 7 Mar 2026 00:47:51 +0100 Subject: [PATCH] fix: mock localStorage in test setup for Zustand persist middleware --- frontend/src/stores/__tests__/authStore.test.ts | 1 + frontend/src/test/setup.ts | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/frontend/src/stores/__tests__/authStore.test.ts b/frontend/src/stores/__tests__/authStore.test.ts index fa16eab..b44e453 100644 --- a/frontend/src/stores/__tests__/authStore.test.ts +++ b/frontend/src/stores/__tests__/authStore.test.ts @@ -3,6 +3,7 @@ import { useAuthStore } from '@/stores/authStore' describe('authStore', () => { beforeEach(() => { + localStorage.clear() useAuthStore.setState({ token: null, isAuthenticated: false }) }) diff --git a/frontend/src/test/setup.ts b/frontend/src/test/setup.ts index c44951a..0fa7bfd 100644 --- a/frontend/src/test/setup.ts +++ b/frontend/src/test/setup.ts @@ -1 +1,14 @@ import '@testing-library/jest-dom' + +// Zustand persist middleware requires localStorage. jsdom provides it but +// some test runners strip it — ensure a working implementation is always present. +const store: Record = {} +Object.defineProperty(globalThis, 'localStorage', { + value: { + getItem: (k: string) => store[k] ?? null, + setItem: (k: string, v: string) => { store[k] = v }, + removeItem: (k: string) => { delete store[k] }, + clear: () => { Object.keys(store).forEach((k) => delete store[k]) }, + }, + writable: true, +})