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() {