diff --git a/src/api/auth.test.js b/src/api/auth.test.js
new file mode 100644
index 0000000..c9ace4d
--- /dev/null
+++ b/src/api/auth.test.js
@@ -0,0 +1,114 @@
+import MockAdapter from 'axios-mock-adapter';
+import { api, login, register, getUserInfo } from './auth';
+
+describe('auth API', () => {
+  let mockAxios;
+
+  beforeEach(() => {
+    // 确保使用我们导出的 api 实例
+    mockAxios = new MockAdapter(api);
+    localStorage.clear();
+  });
+
+  afterEach(() => {
+    mockAxios.restore();
+  });
+
+  describe('login', () => {
+    it('should send login request with username and password', async () => {
+        const mockResponse = {
+          code: 200,
+          data: { 
+            token: 'mock-token',
+            // 确保响应结构与实际API一致
+            userInfo: { username: 'testuser' }
+          },
+          message: '登录成功'
+        };
+        
+        mockAxios.onPost('/user/login').reply(200, mockResponse);
+    
+        const response = await login('testuser', 'testpass');
+        
+        expect(response.data).toEqual(mockResponse);
+        // 检查token是否存入localStorage
+        expect(localStorage.getItem('token')).toBe('mock-token');
+      });
+    
+
+    it('should handle login failure', async () => {
+      mockAxios.onPost('/user/login').reply(401);
+      
+      await expect(login('wronguser', 'wrongpass')).rejects.toThrow();
+    });
+  });
+
+  describe('register', () => {
+    it('should send register request with username, password and code', async () => {
+      const mockResponse = {
+        code: 200,
+        message: '注册成功'
+      };
+      
+      mockAxios.onPost('/user/regist').reply(200, mockResponse);
+
+      const response = await register('newuser', 'newpass', 'invite123');
+      
+      expect(response.data).toEqual(mockResponse);
+    });
+
+    it('should handle registration failure', async () => {
+      mockAxios.onPost('/user/regist').reply(400);
+      
+      await expect(register('newuser', 'newpass', 'wrongcode')).rejects.toThrow();
+    });
+  });
+
+  describe('getUserInfo', () => {
+    it('should send request with token to get user info', async () => {
+      const mockResponse = {
+        code: 200,
+        data: { username: 'testuser', role: 'user' }
+      };
+      
+      mockAxios.onGet('/user/info').reply(200, mockResponse);
+
+      const response = await getUserInfo('test-token');
+      
+      expect(response.data).toEqual(mockResponse);
+    });
+
+    it('should handle unauthorized request', async () => {
+      mockAxios.onGet('/user/info').reply(401);
+      
+      await expect(getUserInfo('invalid-token')).rejects.toThrow();
+    });
+  });
+
+  describe('request interceptor', () => {
+    it('should add Authorization header when token exists', async () => {
+      localStorage.setItem('token', 'test-token');
+      const mockResponse = { data: 'success' };
+      
+      mockAxios.onGet('/test').reply((config) => {
+        expect(config.headers.Authorization).toBe('Bearer test-token');
+        return [200, mockResponse];
+      });
+
+      const response = await api.get('/test');
+      expect(response.data).toEqual(mockResponse);
+    });
+
+    it('should not add Authorization header when token does not exist', async () => {
+      const mockResponse = { data: 'success' };
+      
+      mockAxios.onGet('/test').reply((config) => {
+        expect(config.headers.Authorization).toBeUndefined();
+        return [200, mockResponse];
+      });
+
+      const response = await api.get('/test');
+      expect(response.data).toEqual(mockResponse);
+    });
+  });
+});
\ No newline at end of file
