diff --git a/src/renderer/pages/Preview.tsx b/src/renderer/pages/Preview.tsx index d9fb5d8..617e81d 100644 --- a/src/renderer/pages/Preview.tsx +++ b/src/renderer/pages/Preview.tsx @@ -161,7 +161,7 @@ const Preview: React.FC = () => { return () => { cleanup(); }; - }, [id, message, navigate]); + }, [id, message, navigate, t]); // 监听页面详情事件 useEffect(() => { diff --git a/tests/setup.renderer.ts b/tests/setup.renderer.ts index ce170da..0329fff 100644 --- a/tests/setup.renderer.ts +++ b/tests/setup.renderer.ts @@ -73,6 +73,36 @@ Object.defineProperty(window, 'matchMedia', { })), }) +// Mock ResizeObserver for Ant Design Splitter and other components +class ResizeObserverMock { + observe = vi.fn() + unobserve = vi.fn() + disconnect = vi.fn() +} +Object.defineProperty(window, 'ResizeObserver', { + writable: true, + value: ResizeObserverMock, +}) + +// Mock getComputedStyle for rc-util/getScrollBarSize +const originalGetComputedStyle = window.getComputedStyle +Object.defineProperty(window, 'getComputedStyle', { + writable: true, + value: (elt: Element, pseudoElt?: string | null) => { + try { + return originalGetComputedStyle(elt, pseudoElt) + } catch { + // Return a minimal mock for elements that don't work in jsdom + return { + getPropertyValue: () => '', + overflow: 'auto', + overflowX: 'auto', + overflowY: 'auto', + } as CSSStyleDeclaration + } + }, +}) + // Reset all mocks before each test beforeEach(() => { vi.clearAllMocks() diff --git a/vitest.config.renderer.ts b/vitest.config.renderer.ts index 3cc07f6..0ad7599 100644 --- a/vitest.config.renderer.ts +++ b/vitest.config.renderer.ts @@ -1,34 +1,36 @@ -import { defineConfig } from 'vitest/config' -import react from '@vitejs/plugin-react' -import path from 'path' +import { defineConfig } from "vitest/config"; +import react from "@vitejs/plugin-react"; +import path from "path"; export default defineConfig({ plugins: [react()], test: { - name: 'renderer', - environment: 'jsdom', - include: ['src/renderer/**/*.test.{ts,tsx}'], - exclude: ['**/node_modules/**', '**/dist/**', '**/*.d.ts'], + name: "renderer", + environment: "jsdom", + include: ["src/renderer/**/*.test.{ts,tsx}"], + exclude: ["**/node_modules/**", "**/dist/**", "**/*.d.ts"], globals: true, - setupFiles: ['./tests/setup.renderer.ts'], + setupFiles: ["./tests/setup.renderer.ts"], + retry: 2, // Automatically retry failed tests up to 2 times to handle intermittent failures + testTimeout: 10000, // Increase timeout for async tests (default is 5000ms) coverage: { - provider: 'v8', - reporter: ['text', 'json', 'html'], + provider: "v8", + reporter: ["text", "json", "html"], exclude: [ - '**/node_modules/**', - '**/dist/**', - '**/*.d.ts', - '**/__tests__/**', - '**/tests/**', - '**/*.test.ts', - '**/*.test.tsx', - '**/*.config.ts' - ] - } + "**/node_modules/**", + "**/dist/**", + "**/*.d.ts", + "**/__tests__/**", + "**/tests/**", + "**/*.test.ts", + "**/*.test.tsx", + "**/*.config.ts", + ], + }, }, resolve: { alias: { - '@': path.resolve(__dirname, './src') - } - } -}) + "@": path.resolve(__dirname, "./src"), + }, + }, +});