diff --git a/src/components/Personal/Personal.test.jsx b/src/components/Personal/Personal.test.jsx
new file mode 100644
index 0000000..ef6bad8
--- /dev/null
+++ b/src/components/Personal/Personal.test.jsx
@@ -0,0 +1,209 @@
+// Personal.test.jsx
+import React from 'react';
+import { render, screen, waitFor, act } from '@testing-library/react';
+import { MemoryRouter, useLocation, useNavigate } from 'react-router-dom';
+import Personal from './Personal';
+import { getUserInfo, getDownloadQuota, getDownloadProgress } from '../../api/personal';
+
+// Mock API 调用
+jest.mock('../../api/personal', () => ({
+  getUserInfo: jest.fn(),
+  getDownloadQuota: jest.fn(),
+  getDownloadProgress: jest.fn()
+}));
+
+// Mock react-router-dom hooks
+jest.mock('react-router-dom', () => ({
+  ...jest.requireActual('react-router-dom'),
+  useNavigate: jest.fn(),
+  useLocation: jest.fn()
+}));
+
+describe('Personal Component', () => {
+  const mockNavigate = jest.fn();
+  const mockLocation = {
+    pathname: '/personal',
+    state: null
+  };
+
+  beforeEach(() => {
+    useNavigate.mockReturnValue(mockNavigate);
+    useLocation.mockReturnValue(mockLocation);
+    
+    // 重置所有 mock
+    jest.clearAllMocks();
+    
+    // 设置默认 mock 返回值
+    getUserInfo.mockResolvedValue({
+      username: 'testuser',
+      registTime: '2023-01-01',
+      level: 2,
+      magicPoints: 1000,
+      upload: 1024 * 1024 * 5, // 5MB
+      download: 1024 * 1024 * 2, // 2MB
+      shareRate: 2.5
+    });
+    
+    getDownloadQuota.mockResolvedValue({
+      total: 1024 * 1024 * 10, // 10MB
+      used: 1024 * 1024 * 3,   // 3MB
+      remaining: 1024 * 1024 * 7 // 7MB
+    });
+    
+    getDownloadProgress.mockResolvedValue({
+      'task1': 0.25,
+      'task2': 0.75
+    });
+  });
+
+  it('应该正确加载并显示用户数据', async () => {
+    render(
+      <MemoryRouter>
+        <Personal />
+      </MemoryRouter>
+    );
+
+    // 初始加载状态
+    expect(screen.getByText('加载中...')).toBeInTheDocument();
+
+    // 等待数据加载完成
+    await waitFor(() => {
+      expect(screen.getByText('testuser')).toBeInTheDocument();
+      expect(screen.getByText(/加入时间: 2023-01-01/)).toBeInTheDocument();
+      expect(screen.getByText(/会员等级: Lv.2/)).toBeInTheDocument();
+      expect(screen.getByText('1000')).toBeInTheDocument(); // 保种积分
+      expect(screen.getByText('5.00 MB')).toBeInTheDocument(); // 上传量
+      expect(screen.getByText('2.00 MB')).toBeInTheDocument(); // 下载量
+      expect(screen.getByText('2.5')).toBeInTheDocument(); // 分享率
+    });
+  });
+
+  it('应该显示下载额度信息', async () => {
+    render(
+      <MemoryRouter>
+        <Personal />
+      </MemoryRouter>
+    );
+
+    await waitFor(() => {
+      expect(screen.getByText(/3.00 MB 已使用/)).toBeInTheDocument();
+      expect(screen.getByText(/7.00 MB 剩余/)).toBeInTheDocument();
+      expect(screen.getByText(/总额度: 10.00 MB/)).toBeInTheDocument();
+    });
+  });
+
+  it('应该显示下载进度', async () => {
+    render(
+      <MemoryRouter>
+        <Personal />
+      </MemoryRouter>
+    );
+
+    await waitFor(() => {
+      expect(screen.getByText('当前下载进度')).toBeInTheDocument();
+      expect(screen.getByText(/任务: task1/)).toBeInTheDocument();
+      expect(screen.getByText('25%')).toBeInTheDocument();
+      expect(screen.getByText(/任务: task2/)).toBeInTheDocument();
+      expect(screen.getByText('75%')).toBeInTheDocument();
+    });
+  });
+
+  it('应该显示功能卡片并处理点击', async () => {
+    render(
+      <MemoryRouter>
+        <Personal />
+      </MemoryRouter>
+    );
+
+    await waitFor(() => {
+      const exchangeCard = screen.getByText('兑换区');
+      expect(exchangeCard).toBeInTheDocument();
+      
+      // 模拟点击功能卡片
+      act(() => {
+        exchangeCard.closest('.action-card').click();
+      });
+      
+      expect(mockNavigate).toHaveBeenCalledWith('/personal/Exchange');
+    });
+  });
+
+  it('应该处理返回按钮点击', async () => {
+    render(
+      <MemoryRouter>
+        <Personal />
+      </MemoryRouter>
+    );
+
+    await waitFor(() => {
+      const backButton = screen.getByText(/返回/);
+      act(() => {
+        backButton.click();
+      });
+      
+      expect(mockNavigate).toHaveBeenCalledWith(-1);
+    });
+  });
+
+  it('应该处理从子页面返回的情况', async () => {
+    useLocation.mockReturnValue({
+      pathname: '/personal',
+      state: { fromSubpage: true, dashboardTab: 'uploads' }
+    });
+
+    render(
+      <MemoryRouter>
+        <Personal />
+      </MemoryRouter>
+    );
+
+    await waitFor(() => {
+      const backButton = screen.getByText(/返回/);
+      act(() => {
+        backButton.click();
+      });
+      
+      expect(mockNavigate).toHaveBeenCalledWith('/dashboard/uploads', { replace: true });
+    });
+  });
+
+  it('应该显示错误信息当API调用失败', async () => {
+    getUserInfo.mockRejectedValue(new Error('获取用户信息失败'));
+
+    render(
+      <MemoryRouter>
+        <Personal />
+      </MemoryRouter>
+    );
+
+    await waitFor(() => {
+      expect(screen.getByText(/错误: 获取用户信息失败/)).toBeInTheDocument();
+    });
+  });
+
+
+  it('应该定期更新下载进度', async () => {
+    jest.useFakeTimers();
+    
+    render(
+      <MemoryRouter>
+        <Personal />
+      </MemoryRouter>
+    );
+
+    await waitFor(() => {
+      expect(getDownloadProgress).toHaveBeenCalledTimes(1);
+    });
+
+    // 快进时间
+    act(() => {
+      jest.advanceTimersByTime(10000);
+    });
+
+    await waitFor(() => {
+      expect(getDownloadProgress).toHaveBeenCalledTimes(2);
+    });
+
+    jest.useRealTimers();
+  });
+});
\ No newline at end of file
