blob: de89c3436933dc789a6253d6b0b43e9c46577201 [file] [log] [blame]
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();
});
});