- web/: React + Vite + TypeScript 前端 - backend/: Django + DRF + SimpleJWT 后端 - prototype/: HTML 设计原型 - docs/: PRD 和设计评审文档 - test: 单元测试 + E2E 极限测试
21 lines
1014 B
TypeScript
21 lines
1014 B
TypeScript
import '@testing-library/jest-dom';
|
|
import { vi } from 'vitest';
|
|
|
|
// Mock URL.createObjectURL and URL.revokeObjectURL for jsdom
|
|
URL.createObjectURL = vi.fn(() => 'blob:mock-url');
|
|
URL.revokeObjectURL = vi.fn();
|
|
|
|
// Always provide a working localStorage mock — jsdom/node may have a broken one
|
|
// that causes `localStorage.getItem is not a function` in Vitest 4.x
|
|
const _store: Record<string, string> = {};
|
|
const mockStorage = {
|
|
getItem: (key: string) => _store[key] ?? null,
|
|
setItem: (key: string, value: string) => { _store[key] = String(value); },
|
|
removeItem: (key: string) => { delete _store[key]; },
|
|
clear: () => { Object.keys(_store).forEach(k => delete _store[k]); },
|
|
get length() { return Object.keys(_store).length; },
|
|
key: (i: number) => Object.keys(_store)[i] ?? null,
|
|
};
|
|
Object.defineProperty(globalThis, 'localStorage', { value: mockStorage, writable: true, configurable: true });
|
|
Object.defineProperty(window, 'localStorage', { value: mockStorage, writable: true, configurable: true });
|