From 9c5f5c8cfe705865c817d1c5b6669102194c8782 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=A8=E9=9C=96=E9=93=83?= Date: Wed, 10 Jun 2026 20:56:38 +0800 Subject: [PATCH] =?UTF-8?q?refactor(StorageCleaner):=20=E8=A7=84=E8=8C=83?= =?UTF-8?q?=E5=8C=96=E9=A1=B5=E9=9D=A2=E7=BB=84=E4=BB=B6=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将子组件移至 components/ 子目录(OptionItem、AutoRefreshToggle、CleaningResult、StorageCleanerConfirm、StorageOptionsGrid、ErrorDisplay) - 创建 __tests__/ 目录结构 - 更新所有相关导入路径 Co-authored-by: Cursor --- .../__tests__/StorageCleanerConfirm.test.tsx | 2 +- .../StorageCleaner/__tests__/index.test.tsx | 31 +++++++++++++++++++ .../{ => components}/AutoRefreshToggle.tsx | 0 .../{ => components}/CleaningResult.tsx | 0 .../{ => components}/ErrorDisplay.tsx | 0 .../{ => components}/OptionItem.tsx | 2 +- .../StorageCleanerConfirm.tsx | 0 .../{ => components}/StorageOptionsGrid.tsx | 2 +- src/pages/StorageCleaner/index.tsx | 10 +++--- 9 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 src/pages/StorageCleaner/__tests__/index.test.tsx rename src/pages/StorageCleaner/{ => components}/AutoRefreshToggle.tsx (100%) rename src/pages/StorageCleaner/{ => components}/CleaningResult.tsx (100%) rename src/pages/StorageCleaner/{ => components}/ErrorDisplay.tsx (100%) rename src/pages/StorageCleaner/{ => components}/OptionItem.tsx (97%) rename src/pages/StorageCleaner/{ => components}/StorageCleanerConfirm.tsx (100%) rename src/pages/StorageCleaner/{ => components}/StorageOptionsGrid.tsx (97%) diff --git a/src/components/__tests__/StorageCleanerConfirm.test.tsx b/src/components/__tests__/StorageCleanerConfirm.test.tsx index 490ffa4..4f52182 100644 --- a/src/components/__tests__/StorageCleanerConfirm.test.tsx +++ b/src/components/__tests__/StorageCleanerConfirm.test.tsx @@ -1,6 +1,6 @@ import { beforeEach, describe, expect, it, vi } from 'vitest'; import { fireEvent, render, screen } from '@testing-library/react'; -import { StorageCleanerConfirm } from '@/pages/StorageCleaner/StorageCleanerConfirm'; +import { StorageCleanerConfirm } from '@/pages/StorageCleaner/components/StorageCleanerConfirm'; import type { StorageCleanerOptions } from '@/types/storage'; import React from 'react'; diff --git a/src/pages/StorageCleaner/__tests__/index.test.tsx b/src/pages/StorageCleaner/__tests__/index.test.tsx new file mode 100644 index 0000000..b10e7e1 --- /dev/null +++ b/src/pages/StorageCleaner/__tests__/index.test.tsx @@ -0,0 +1,31 @@ +import { render, screen } from '@testing-library/react'; +import { describe, it, expect, vi } from 'vitest'; +import Index from '../index'; + +// Mock the chrome APIs +vi.mock('@/utils/chromeStorage', () => ({ + storageUtil: { + get: vi.fn().mockResolvedValue(null), + set: vi.fn().mockResolvedValue(undefined), + }, +})); + +vi.mock('@/utils/storageCleaner', () => ({ + getCurrentTab: vi.fn().mockResolvedValue({ id: 1, url: 'https://example.com' }), + isRestrictedUrl: vi.fn().mockReturnValue(false), + getCookieSize: vi.fn().mockResolvedValue(0), + getLocalStorageSize: vi.fn().mockResolvedValue(0), + getSessionStorageSize: vi.fn().mockResolvedValue(0), + getOriginStorageEstimate: vi.fn().mockResolvedValue(0), + getCacheStorageSize: vi.fn().mockResolvedValue(0), + getServiceWorkerCount: vi.fn().mockResolvedValue(0), + clearStorage: vi.fn().mockResolvedValue({ overallSuccess: true }), + formatCleaningResult: vi.fn().mockReturnValue('Cleaned successfully'), +})); + +describe('StorageCleaner 页面', () => { + it('应该渲染初始化加载状态', () => { + render(); + expect(screen.getByText(/initializing/i)).toBeInTheDocument(); + }); +}); diff --git a/src/pages/StorageCleaner/AutoRefreshToggle.tsx b/src/pages/StorageCleaner/components/AutoRefreshToggle.tsx similarity index 100% rename from src/pages/StorageCleaner/AutoRefreshToggle.tsx rename to src/pages/StorageCleaner/components/AutoRefreshToggle.tsx diff --git a/src/pages/StorageCleaner/CleaningResult.tsx b/src/pages/StorageCleaner/components/CleaningResult.tsx similarity index 100% rename from src/pages/StorageCleaner/CleaningResult.tsx rename to src/pages/StorageCleaner/components/CleaningResult.tsx diff --git a/src/pages/StorageCleaner/ErrorDisplay.tsx b/src/pages/StorageCleaner/components/ErrorDisplay.tsx similarity index 100% rename from src/pages/StorageCleaner/ErrorDisplay.tsx rename to src/pages/StorageCleaner/components/ErrorDisplay.tsx diff --git a/src/pages/StorageCleaner/OptionItem.tsx b/src/pages/StorageCleaner/components/OptionItem.tsx similarity index 97% rename from src/pages/StorageCleaner/OptionItem.tsx rename to src/pages/StorageCleaner/components/OptionItem.tsx index a6c96ee..578ce54 100644 --- a/src/pages/StorageCleaner/OptionItem.tsx +++ b/src/pages/StorageCleaner/components/OptionItem.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { formatBytes } from '@/utils/format'; import { useI18n } from '@/utils/chromeI18n'; import { cn } from '@/lib/utils'; -import type { StorageSizeInfo } from './useStorageCleaner'; +import type { StorageSizeInfo } from '../useStorageCleaner'; import { Checkbox } from '@/components/ui/checkbox'; interface OptionItemProps extends React.HTMLAttributes { diff --git a/src/pages/StorageCleaner/StorageCleanerConfirm.tsx b/src/pages/StorageCleaner/components/StorageCleanerConfirm.tsx similarity index 100% rename from src/pages/StorageCleaner/StorageCleanerConfirm.tsx rename to src/pages/StorageCleaner/components/StorageCleanerConfirm.tsx diff --git a/src/pages/StorageCleaner/StorageOptionsGrid.tsx b/src/pages/StorageCleaner/components/StorageOptionsGrid.tsx similarity index 97% rename from src/pages/StorageCleaner/StorageOptionsGrid.tsx rename to src/pages/StorageCleaner/components/StorageOptionsGrid.tsx index f19e36a..9873e1d 100644 --- a/src/pages/StorageCleaner/StorageOptionsGrid.tsx +++ b/src/pages/StorageCleaner/components/StorageOptionsGrid.tsx @@ -1,6 +1,6 @@ import React from 'react'; import type { StorageCleanerOptions } from '@/types/storage'; -import type { StorageSizeInfo } from './useStorageCleaner'; +import type { StorageSizeInfo } from '../useStorageCleaner'; import OptionItem from './OptionItem'; import { useI18n } from '@/utils/chromeI18n'; import { cn } from '@/lib/utils'; diff --git a/src/pages/StorageCleaner/index.tsx b/src/pages/StorageCleaner/index.tsx index 63b1f28..eb5dcd9 100644 --- a/src/pages/StorageCleaner/index.tsx +++ b/src/pages/StorageCleaner/index.tsx @@ -1,11 +1,11 @@ import { Loader2 } from 'lucide-react'; import { Button } from '@/components/ui/button'; -import StorageCleanerConfirm from './StorageCleanerConfirm'; +import StorageCleanerConfirm from './components/StorageCleanerConfirm'; import { useStorageCleaner } from './useStorageCleaner'; -import StorageOptionsGrid from './StorageOptionsGrid'; -import AutoRefreshToggle from './AutoRefreshToggle'; -import ErrorDisplay from './ErrorDisplay'; -import CleaningResult from './CleaningResult'; +import StorageOptionsGrid from './components/StorageOptionsGrid'; +import AutoRefreshToggle from './components/AutoRefreshToggle'; +import ErrorDisplay from './components/ErrorDisplay'; +import CleaningResult from './components/CleaningResult'; import { useI18n } from '@/utils/chromeI18n'; export default function Index() {