添加了相关测试文件,引入Tailwindcss
Change-Id: I12054143571bb688590af0357125a0ed26ff2050
diff --git a/src/App.test.jsx b/src/App.test.jsx
new file mode 100644
index 0000000..de89c34
--- /dev/null
+++ b/src/App.test.jsx
@@ -0,0 +1,77 @@
+import { describe, it, expect, vi, beforeEach } from 'vitest';
+import { render, screen } from '@testing-library/react';
+import userEvent from '@testing-library/user-event';
+import { BrowserRouter } from 'react-router-dom';
+import App from './App';
+
+// 模拟 react-router-dom 的 useNavigate
+vi.mock('react-router-dom', async () => {
+ const actual = await vi.importActual('react-router-dom');
+ return {
+ ...actual,
+ useNavigate: () => vi.fn(),
+ };
+});
+
+describe('App 组件', () => {
+ beforeEach(() => {
+ // 清除 localStorage
+ window.localStorage.clear();
+ });
+
+ it('应该渲染网站标题', () => {
+ render(
+ <BrowserRouter>
+ <App />
+ </BrowserRouter>
+ );
+
+ expect(screen.getByText('PT网站')).toBeInTheDocument();
+ expect(screen.getByText('欢迎来到PT网站')).toBeInTheDocument();
+ });
+
+ it('当用户未登录时应该显示游客角色', () => {
+ render(
+ <BrowserRouter>
+ <App />
+ </BrowserRouter>
+ );
+
+ expect(screen.getByText('(游客)')).toBeInTheDocument();
+ });
+
+ it('当用户是管理员时应该显示管理面板菜单', () => {
+ // 模拟管理员登录
+ window.localStorage.setItem('user', JSON.stringify({
+ username: 'admin',
+ role: 'admin',
+ avatar: 'avatar-url'
+ }));
+
+ render(
+ <BrowserRouter>
+ <App />
+ </BrowserRouter>
+ );
+
+ expect(screen.getByText('管理面板')).toBeInTheDocument();
+ expect(screen.getByText('管理员专区')).toBeInTheDocument();
+ });
+
+ it('当用户是版主时应该显示版主专区', () => {
+ // 模拟版主登录
+ window.localStorage.setItem('user', JSON.stringify({
+ username: 'moderator',
+ role: 'moderator',
+ avatar: 'avatar-url'
+ }));
+
+ render(
+ <BrowserRouter>
+ <App />
+ </BrowserRouter>
+ );
+
+ expect(screen.getByText('版主专区')).toBeInTheDocument();
+ });
+});
\ No newline at end of file