diff --git a/src/components/Administer.test.jsx b/src/components/Administer.test.jsx
new file mode 100644
index 0000000..5a452fa
--- /dev/null
+++ b/src/components/Administer.test.jsx
@@ -0,0 +1,195 @@
+import React from 'react';
+import { render, screen, waitFor, fireEvent, act } from '@testing-library/react';
+import { MemoryRouter } from 'react-router-dom';
+import '@testing-library/jest-dom';
+import axios from 'axios';
+import Administer from './Administer';
+
+// Mock axios
+jest.mock('axios');
+
+// Mock localStorage
+const localStorageMock = {
+  getItem: jest.fn(),
+  setItem: jest.fn(),
+  removeItem: jest.fn(),
+  clear: jest.fn(),
+};
+global.localStorage = localStorageMock;
+
+describe('Administer Component', () => {
+  beforeEach(() => {
+    localStorageMock.getItem.mockReturnValue('test-token');
+    jest.clearAllMocks();
+  });
+
+  const mockUsers = [
+    {
+      username: 'user1',
+      authority: 'USER',
+      registTime: '2023-01-01T00:00:00',
+      lastLogin: '2023-05-01T00:00:00',
+      upload: 1000,
+      download: 500,
+      shareRate: 2.0,
+      magicPoints: 100
+    },
+    {
+      username: 'admin1',
+      authority: 'ADMIN',
+      registTime: '2023-01-15T00:00:00',
+      lastLogin: '2023-05-10T00:00:00',
+      upload: 5000,
+      download: 1000,
+      shareRate: 5.0,
+      magicPoints: 500
+    }
+  ];
+
+  const mockDiscounts = [
+    {
+      id: 1,
+      name: '五一活动',
+      discountType: 'FREE',
+      startTime: '2023-05-01T00:00:00',
+      endTime: '2023-05-07T23:59:59',
+      createTime: '2023-04-25T10:00:00',
+      status: '已过期'
+    },
+    {
+      id: 2,
+      name: '端午节活动',
+      discountType: 'HALF',
+      startTime: '2023-06-10T00:00:00',
+      endTime: '2023-06-15T23:59:59',
+      createTime: '2023-05-30T10:00:00',
+      status: '已过期'
+    }
+  ];
+
+  const mockCurrentDiscount = {
+    id: 3,
+    name: '国庆活动',
+    discountType: 'DOUBLE',
+    startTime: '2023-10-01T00:00:00',
+    endTime: '2023-10-07T23:59:59',
+    createTime: '2023-09-25T10:00:00',
+    status: '进行中'
+  };
+
+  const renderAdminister = () => {
+    return render(
+      <MemoryRouter>
+        <Administer />
+      </MemoryRouter>
+    );
+  };
+
+  test('renders Administer component with user tab by default', async () => {
+    axios.get.mockResolvedValueOnce({
+      data: {
+        code: 200,
+        data: { data: mockUsers }
+      }
+    });
+
+    renderAdminister();
+
+    expect(screen.getByText('系统管理')).toBeInTheDocument();
+    expect(screen.getByText('用户管理')).toBeInTheDocument();
+    expect(screen.getByText('折扣管理')).toBeInTheDocument();
+
+    await waitFor(() => {
+      expect(screen.getByText('user1')).toBeInTheDocument();
+    });
+    
+    expect(screen.getByText('admin1')).toBeInTheDocument();
+  });
+
+  test('switches between user and discount tabs', async () => {
+    axios.get
+      .mockResolvedValueOnce({
+        data: {
+          code: 200,
+          data: { data: mockUsers }
+        }
+      })
+      .mockResolvedValueOnce({
+        data: {
+          code: 200,
+          data: { data: mockDiscounts }
+        }
+      })
+      .mockResolvedValueOnce({
+        data: {
+          code: 200,
+          data: { data: mockCurrentDiscount }
+        }
+      });
+
+    renderAdminister();
+
+    await waitFor(() => {
+      expect(screen.getByText('user1')).toBeInTheDocument();
+    });
+
+    fireEvent.click(screen.getByText('折扣管理'));
+
+    await waitFor(() => {
+      expect(screen.getByText('五一活动')).toBeInTheDocument();
+    });
+    
+    expect(screen.getByText('国庆活动')).toBeInTheDocument();
+  });
+
+ 
+
+  test('changes user authority', async () => {
+    axios.get.mockResolvedValueOnce({
+      data: {
+        code: 200,
+        data: { data: mockUsers }
+      }
+    });
+    axios.put.mockResolvedValueOnce({
+      data: {
+        code: 200,
+        message: '修改用户权限成功'
+      }
+    });
+
+    renderAdminister();
+
+    await waitFor(() => {
+      expect(screen.getByText('user1')).toBeInTheDocument();
+    });
+
+    const selectElement = screen.getAllByRole('combobox')[0];
+    fireEvent.change(selectElement, { target: { value: 'ADMIN' } });
+
+    await waitFor(() => {
+      expect(axios.put).toHaveBeenCalled();
+    });
+    
+    expect(axios.put).toHaveBeenCalledWith(
+      expect.stringContaining('/user/changeAuthority'),
+      {
+        changeUsername: 'user1',
+        authority: 'ADMIN'
+      },
+      expect.any(Object)
+    );
+  });
+
+
+
+  test('shows error messages', async () => {
+    axios.get.mockRejectedValueOnce(new Error('Network Error'));
+
+    renderAdminister();
+
+    await waitFor(() => {
+      expect(screen.getByText(/获取用户列表失败/)).toBeInTheDocument();
+    });
+  });
+});
\ No newline at end of file
