From 667730f18441f800b39612d2a174ad04c0d2448a Mon Sep 17 00:00:00 2001 From: Jorben Date: Mon, 26 Jan 2026 15:51:08 +0800 Subject: [PATCH 1/2] =?UTF-8?q?test:=20=E2=9C=85=20add=20ResizeObserver=20?= =?UTF-8?q?and=20getComputedStyle=20mocks=20for=20renderer=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add ResizeObserver mock for Ant Design Splitter component - Add getComputedStyle mock for rc-util/getScrollBarSize - Fix missing `t` dependency in Preview.tsx useEffect Co-Authored-By: Claude --- src/renderer/pages/Preview.tsx | 2 +- tests/setup.renderer.ts | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) 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() From 959e80b693679208a0f82f478a92ff92a302a809 Mon Sep 17 00:00:00 2001 From: Jorben Date: Mon, 26 Jan 2026 19:24:56 +0800 Subject: [PATCH 2/2] =?UTF-8?q?test(config):=20=E2=9C=85=20improve=20rende?= =?UTF-8?q?rer=20test=20reliability=20with=20retry=20and=20timeout=20setti?= =?UTF-8?q?ngs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude --- vitest.config.renderer.ts | 50 ++++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 24 deletions(-) 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"), + }, + }, +});