diff --git a/src/entrypoints/__tests__/background.test.ts b/src/entrypoints/__tests__/background.test.ts index 21d5d32..7029ba1 100644 --- a/src/entrypoints/__tests__/background.test.ts +++ b/src/entrypoints/__tests__/background.test.ts @@ -36,7 +36,7 @@ describe('background 菜单注册与分流', () => { expect(chrome.contextMenus.create).toHaveBeenCalledWith( expect.objectContaining({ id: 'jwt', - title: '🔑 解析 JWT', + title: '解析 JWT', parentId: 'testing-tools-parent', }), ); @@ -48,7 +48,7 @@ describe('background 菜单注册与分流', () => { expect(chrome.contextMenus.create).toHaveBeenCalledWith( expect.objectContaining({ id: 'qrCode-page', - title: '🔗 网页链接转二维码', + title: '网页链接转二维码', contexts: ['page'], }), ); diff --git a/src/pages/Base64Converter/components/DecodeResultPaper.tsx b/src/pages/Base64Converter/components/DecodeResultPaper.tsx index c3987e0..5d9657c 100644 --- a/src/pages/Base64Converter/components/DecodeResultPaper.tsx +++ b/src/pages/Base64Converter/components/DecodeResultPaper.tsx @@ -10,6 +10,7 @@ import { Download } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; +import { Label } from '@/components/ui/label'; import { formatBytes } from '@/utils/format'; import { useI18n } from '@/utils/chromeI18n'; @@ -61,9 +62,9 @@ export default function DecodeResultPaper({ {/* 文件名输入 */}
- onFileNameChange(e.target.value)} />
diff --git a/src/pages/JsonTools/__tests__/index.test.tsx b/src/pages/JsonTools/__tests__/index.test.tsx index 78ef06b..73e98ab 100644 --- a/src/pages/JsonTools/__tests__/index.test.tsx +++ b/src/pages/JsonTools/__tests__/index.test.tsx @@ -3,9 +3,9 @@ import { describe, it, expect } from 'vitest'; import Index from '../index'; describe('JsonTools 页面', () => { - it('应该渲染页面标题', () => { + it('应该渲染模式切换按钮', () => { render(); - // 基本渲染测试 - expect(screen.getByRole('button')).toBeInTheDocument(); + // 基本渲染测试:页面含多个模式切换按钮,应至少渲染一个 + expect(screen.getAllByRole('button').length).toBeGreaterThan(0); }); }); diff --git a/src/pages/QrCode/__tests__/index.test.tsx b/src/pages/QrCode/__tests__/index.test.tsx index dc415bb..00cefed 100644 --- a/src/pages/QrCode/__tests__/index.test.tsx +++ b/src/pages/QrCode/__tests__/index.test.tsx @@ -26,11 +26,11 @@ vi.mock('@/config/features', async (importOriginal) => { }; }); -vi.mock('@/components/QrCodePreview', () => ({ +vi.mock('../components/QrCodePreview', () => ({ default: () =>
QrCodePreview
, })); -vi.mock('@/components/ImageUploader', () => ({ +vi.mock('../components/ImageUploader', () => ({ default: () =>
ImageUploader
, })); diff --git a/src/pages/QrCode/components/ImageUploader.tsx b/src/pages/QrCode/components/ImageUploader.tsx index fb801b1..1810834 100644 --- a/src/pages/QrCode/components/ImageUploader.tsx +++ b/src/pages/QrCode/components/ImageUploader.tsx @@ -113,7 +113,7 @@ const ImageUploader = ({ ? 'border-green-600 bg-green-50' : selectedFile ? 'border-green-600 bg-green-50/50' - : 'border-input bg-muted hover:border-green-600 hover:bg-green-500/10/50' + : 'border-input bg-muted hover:border-green-600 hover:bg-green-500/10' }`} onDragOver={handleDragOver} onDragLeave={handleDragLeave} diff --git a/src/pages/StorageCleaner/__tests__/index.test.tsx b/src/pages/StorageCleaner/__tests__/index.test.tsx index b10e7e1..bf5f345 100644 --- a/src/pages/StorageCleaner/__tests__/index.test.tsx +++ b/src/pages/StorageCleaner/__tests__/index.test.tsx @@ -25,7 +25,8 @@ vi.mock('@/utils/storageCleaner', () => ({ describe('StorageCleaner 页面', () => { it('应该渲染初始化加载状态', () => { + // storageCleaner:initializing 的中文文案为「正在读取站点数据...」 render(); - expect(screen.getByText(/initializing/i)).toBeInTheDocument(); + expect(screen.getByText(/正在读取站点数据/)).toBeInTheDocument(); }); }); diff --git a/src/pages/StorageCleaner/components/StorageCleanerConfirm.tsx b/src/pages/StorageCleaner/components/StorageCleanerConfirm.tsx index 88a1349..b3397cc 100644 --- a/src/pages/StorageCleaner/components/StorageCleanerConfirm.tsx +++ b/src/pages/StorageCleaner/components/StorageCleanerConfirm.tsx @@ -39,17 +39,20 @@ export function StorageCleanerConfirm({ 'w-[90%] max-w-[340px] p-6 gap-0 rounded-2xl overflow-hidden shadow-xl border border-border bg-card text-card-foreground', )} > + {/* 头部标题区域 */} {t('storageCleaner:confirmTitle')} + {/* 内容主体:限制最大宽度,防止内部元素在大分辨率下被横向拉得太松散 */}
{t('storageCleaner:confirmDesc')} + {/* 待清理项目徽章群 */}
{selectedOptions.map((label) => ( + {/* 风险警告横幅 */}
diff --git a/src/pages/Timestamp/__tests__/index.test.tsx b/src/pages/Timestamp/__tests__/index.test.tsx index c46df35..689b495 100644 --- a/src/pages/Timestamp/__tests__/index.test.tsx +++ b/src/pages/Timestamp/__tests__/index.test.tsx @@ -3,9 +3,9 @@ import { describe, it, expect } from 'vitest'; import Index from '../index'; describe('Timestamp 页面', () => { - it('应该渲染页面标题', () => { + it('应该渲染模式切换按钮', () => { render(); - // 基本渲染测试 - expect(screen.getByRole('button')).toBeInTheDocument(); + // 基本渲染测试:页面含多个模式切换按钮,应至少渲染一个 + expect(screen.getAllByRole('button').length).toBeGreaterThan(0); }); }); diff --git a/src/utils/__tests__/contextMenu.test.ts b/src/utils/__tests__/contextMenu.test.ts index 071619b..752cee1 100644 --- a/src/utils/__tests__/contextMenu.test.ts +++ b/src/utils/__tests__/contextMenu.test.ts @@ -50,7 +50,7 @@ describe('contextMenu', () => { ); expect(imageMenus).toHaveLength(1); expect(imageMenus[0].id).toBe('qrCode-image'); - expect(imageMenus[0].title).toBe('🖼️ 解析图片二维码'); + expect(imageMenus[0].title).toBe('解析图片二维码'); }); }); @@ -73,7 +73,7 @@ describe('contextMenu', () => { expect(chrome.contextMenus.create).toHaveBeenCalledWith({ id: 'jwt', - title: '🔑 解析 JWT', + title: '解析 JWT', contexts: ['selection'], parentId: 'testing-tools-parent', }); diff --git a/src/utils/base64Converter.ts b/src/utils/base64Converter.ts index 494f3b5..ce95bc5 100644 --- a/src/utils/base64Converter.ts +++ b/src/utils/base64Converter.ts @@ -2,8 +2,6 @@ * Base64 转换器工具函数 */ -import { formatBytes } from './format'; - /** 最大文件大小限制(10 MB) */ export const MAX_FILE_SIZE = 10 * 1024 * 1024; @@ -212,17 +210,6 @@ export function extractMimeTypeFromDataUri(dataUri: string): string { return match ? match[1] : 'application/octet-stream'; } -/** - * 格式化文件大小显示 - * - * @deprecated 直接使用 {@link formatBytes} 代替 - * @param bytes 字节数 - * @returns 格式化后的字符串 - */ -export function formatFileSize(bytes: number): string { - return formatBytes(bytes); -} - /** * Base64 解码为二进制后的产物 */ diff --git a/vitest.setup.ts b/vitest.setup.ts index 7aa20ec..efd1d23 100644 --- a/vitest.setup.ts +++ b/vitest.setup.ts @@ -125,6 +125,20 @@ const webExtensionMock = { sendMessage: vi.fn().mockResolvedValue(undefined), create: vi.fn().mockResolvedValue({}), reload: vi.fn().mockResolvedValue(undefined), + onActivated: { + addListener: vi.fn(), + removeListener: vi.fn(), + }, + onUpdated: { + addListener: vi.fn(), + removeListener: vi.fn(), + }, + }, + windows: { + onFocusChanged: { + addListener: vi.fn(), + removeListener: vi.fn(), + }, }, runtime: { id: 'test-extension-id',