diff --git a/src/components/Personal/Upload.test.jsx b/src/components/Personal/Upload.test.jsx
new file mode 100644
index 0000000..9c72182
--- /dev/null
+++ b/src/components/Personal/Upload.test.jsx
@@ -0,0 +1,206 @@
+// Upload.test.jsx
+import React from 'react';
+import { render, screen, waitFor, fireEvent } from '@testing-library/react';
+import { MemoryRouter, useNavigate, useLocation } from 'react-router-dom';
+import Upload from './Upload';
+import { getUserTorrents, deleteTorrent } from '../../api/personal';
+
+// Mock API 调用
+jest.mock('../../api/personal', () => ({
+  getUserTorrents: jest.fn(),
+  deleteTorrent: jest.fn()
+}));
+
+// Mock react-router-dom hooks
+jest.mock('react-router-dom', () => ({
+  ...jest.requireActual('react-router-dom'),
+  useNavigate: jest.fn(),
+  useLocation: jest.fn()
+}));
+
+// Mock window.confirm
+global.confirm = jest.fn(() => true);
+
+describe('Upload Component', () => {
+  const mockNavigate = jest.fn();
+  const mockLocation = {
+    pathname: '/personal/upload',
+    state: { dashboardTab: 'uploads' }
+  };
+
+  const mockTorrents = [
+    {
+      id: 1,
+      torrentName: 'Test Torrent 1',
+      formattedSize: '1.2 GB',
+      createTime: '2023-01-01T12:00:00Z',
+      downloadCount: 10
+    },
+    {
+      id: 2,
+      torrentName: 'Test Torrent 2',
+      formattedSize: '2.5 GB',
+      createTime: '2023-01-02T12:00:00Z',
+      downloadCount: 5
+    }
+  ];
+
+  beforeEach(() => {
+    useNavigate.mockReturnValue(mockNavigate);
+    useLocation.mockReturnValue(mockLocation);
+    jest.clearAllMocks();
+    getUserTorrents.mockResolvedValue({
+      records: mockTorrents,
+      total: 10
+    });
+    deleteTorrent.mockResolvedValue({ success: true });
+  });
+
+  it('应该正确加载并显示上传记录', async () => {
+    render(
+      <MemoryRouter>
+        <Upload />
+      </MemoryRouter>
+    );
+
+    // 初始加载状态
+    expect(screen.getByText('加载中...')).toBeInTheDocument();
+
+    // 等待数据加载完成
+    await waitFor(() => {
+      expect(screen.getByText('上传记录')).toBeInTheDocument();
+      expect(screen.getByText('Test Torrent 1')).toBeInTheDocument();
+      expect(screen.getByText('Test Torrent 2')).toBeInTheDocument();
+      expect(screen.getByText('1.2 GB')).toBeInTheDocument();
+      expect(screen.getByText('2.5 GB')).toBeInTheDocument();
+      expect(screen.getAllByText('删除')).toHaveLength(2);
+    });
+  });
+
+  it('应该处理删除操作', async () => {
+    render(
+      <MemoryRouter>
+        <Upload />
+      </MemoryRouter>
+    );
+
+    await waitFor(() => {
+      const deleteButtons = screen.getAllByText('删除');
+      fireEvent.click(deleteButtons[0]);
+    });
+
+    expect(global.confirm).toHaveBeenCalledWith('确定要删除这个种子吗？此操作不可撤销！');
+    await waitFor(() => {
+      expect(deleteTorrent).toHaveBeenCalledWith(1);
+      expect(getUserTorrents).toHaveBeenCalledTimes(2); // 初始加载 + 删除后刷新
+    });
+  });
+
+  it('应该处理分页变化', async () => {
+    render(
+      <MemoryRouter>
+        <Upload />
+      </MemoryRouter>
+    );
+
+    await waitFor(() => {
+      const nextPageButton = screen.getByText('下一页');
+      fireEvent.click(nextPageButton);
+    });
+
+    await waitFor(() => {
+      expect(getUserTorrents).toHaveBeenLastCalledWith(2, 5);
+    });
+  });
+
+  it('应该处理直接跳转页码', async () => {
+    render(
+      <MemoryRouter>
+        <Upload />
+      </MemoryRouter>
+    );
+
+    await waitFor(() => {
+      const pageInput = screen.getByRole('spinbutton');
+      fireEvent.change(pageInput, { target: { value: '2' } });
+      fireEvent.keyDown(pageInput, { key: 'Enter' });
+    });
+
+    await waitFor(() => {
+      expect(getUserTorrents).toHaveBeenLastCalledWith(2, 5);
+    }, { timeout: 1000 });
+  });
+
+  it('应该处理返回按钮点击', async () => {
+    render(
+      <MemoryRouter>
+        <Upload />
+      </MemoryRouter>
+    );
+
+    await waitFor(() => {
+      const backButton = screen.getByText((content) => 
+        content.includes('返回个人中心')
+      );
+      fireEvent.click(backButton);
+      
+      expect(mockNavigate).toHaveBeenCalledWith('/personal', {
+        state: {
+          fromSubpage: true,
+          dashboardTab: 'uploads'
+        },
+        replace: true
+      });
+    });
+  });
+
+  it('应该显示错误信息当API调用失败', async () => {
+    getUserTorrents.mockRejectedValue(new Error('获取上传记录失败'));
+
+    render(
+      <MemoryRouter>
+        <Upload />
+      </MemoryRouter>
+    );
+
+    await waitFor(() => {
+      expect(screen.getByText('错误: 获取上传记录失败')).toBeInTheDocument();
+    });
+  });
+
+
+  it('应该禁用分页按钮当在第一页或最后一页', async () => {
+    render(
+      <MemoryRouter>
+        <Upload />
+      </MemoryRouter>
+    );
+
+    await waitFor(() => {
+      const prevButton = screen.getByText('上一页');
+      const firstPageButton = screen.getByText('首页');
+      
+      expect(prevButton).toBeDisabled();
+      expect(firstPageButton).toBeDisabled();
+    });
+  });
+
+  it('应该显示正确的页码导航', async () => {
+    // 模拟有更多页的情况
+    getUserTorrents.mockResolvedValue({
+      records: mockTorrents,
+      total: 50
+    });
+
+    render(
+      <MemoryRouter>
+        <Upload />
+      </MemoryRouter>
+    );
+
+    await waitFor(() => {
+      expect(screen.getByText('...')).toBeInTheDocument();
+      expect(screen.getByText('共 10 页')).toBeInTheDocument();
+    });
+  });
+});
\ No newline at end of file
