docker

Change-Id: Ie7c4842bbed1447bf9117b2e199f69842aa0ec75
diff --git a/src/components/AnnouncementDetail.test.jsx b/src/components/AnnouncementDetail.test.jsx
index 7f44ecd..5a68ecf 100644
--- a/src/components/AnnouncementDetail.test.jsx
+++ b/src/components/AnnouncementDetail.test.jsx
@@ -21,32 +21,25 @@
     id: 1,
     title: '测试公告标题',
     content: '这是测试公告内容\n这是第二行内容',
-    
     createTime: '2023-01-01T00:00:00Z',
-    
   };
 
   beforeEach(() => {
-    // 重置 mock 函数
     mockNavigate.mockClear();
-    
+
     // 设置模拟的 API 响应
     announcementApi.getAnnouncementDetail.mockResolvedValue({
       data: {
         code: 200,
         data: {
-          announcement: mockAnnouncement
-        }
-      }
+          announcement: mockAnnouncement,
+        },
+      },
     });
 
-    // 模拟 useParams
+    // 模拟钩子
     useParams.mockReturnValue({ id: '1' });
-
-    // 模拟 useLocation
-    useLocation.mockReturnValue({
-      state: { fromTab: 'announcement' }
-    });
+    useLocation.mockReturnValue({ state: { fromTab: 'announcement' } });
   });
 
   const renderComponent = () => {
@@ -54,7 +47,6 @@
       <MemoryRouter initialEntries={['/announcement/1']}>
         <Routes>
           <Route path="/announcement/:id" element={<AnnouncementDetail />} />
-          {/* 添加一个模拟的公告列表路由用于导航测试 */}
           <Route path="/dashboard/announcement" element={<div>公告列表</div>} />
         </Routes>
       </MemoryRouter>
@@ -64,9 +56,6 @@
   it('应该正确加载和显示公告详情', async () => {
     renderComponent();
 
-    
-
-    // 等待数据加载完成
     await waitFor(() => {
       expect(screen.getByText('测试公告标题')).toBeInTheDocument();
       expect(screen.getByText('这是测试公告内容')).toBeInTheDocument();
@@ -75,12 +64,8 @@
   });
 
   it('应该处理公告加载失败的情况', async () => {
-    // 模拟 API 返回错误
     announcementApi.getAnnouncementDetail.mockResolvedValue({
-      data: {
-        code: 404,
-        message: '公告不存在'
-      }
+      data: { code: 404, message: '公告不存在' },
     });
 
     renderComponent();
@@ -92,19 +77,18 @@
 
   it('应该能够返回公告区', async () => {
     renderComponent();
-  
+
     await waitFor(() => {
       expect(screen.getByText('测试公告标题')).toBeInTheDocument();
     });
-  
+
     fireEvent.click(screen.getByRole('button', { name: /返回/i }));
-  
+
     // 检查是否导航回公告区
     expect(mockNavigate).toHaveBeenCalledWith('/dashboard/announcement');
   });
 
   it('应该显示加载错误时的UI', async () => {
-    // 模拟 API 抛出错误
     announcementApi.getAnnouncementDetail.mockRejectedValue(new Error('网络错误'));
 
     renderComponent();
@@ -113,4 +97,30 @@
       expect(screen.getByText('获取公告详情失败')).toBeInTheDocument();
     });
   });
-});
\ No newline at end of file
+
+  // 边界测试 - 测试公告ID不存在
+  it('应该处理不存在的公告ID', async () => {
+    announcementApi.getAnnouncementDetail.mockResolvedValue({
+      data: { code: 404, message: '公告不存在' },
+    });
+
+    renderComponent();
+
+    await waitFor(() => {
+      expect(screen.getByText('公告不存在')).toBeInTheDocument();
+    });
+  });
+
+  // 边界测试 - 测试其他API错误
+  it('应该处理服务器错误', async () => {
+    announcementApi.getAnnouncementDetail.mockResolvedValue({
+      data: { code: 500, message: '服务器错误' },
+    });
+
+    renderComponent();
+
+    await waitFor(() => {
+      expect(screen.getByText('服务器错误')).toBeInTheDocument();
+    });
+  });
+});