router.test.tsx
1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// REQ-USR-003: 路由表接线(替换 / 占位,含守卫与重定向,BR1/BR2/D7)
import { describe, it, expect } from 'vitest';
import { screen } from '@testing-library/react';
import { renderShell } from './renderShell';
import AppRouter from '../../src/router';
import type { AuthUser } from '../../src/api/types';
const ADMIN: AuthUser = { id: 1, sUserName: '朱子纯', sUserType: '超级管理员', sLanguage: '中文' };
function renderRouter(initialEntries: string[], preloadedAuth?: Parameters<typeof renderShell>[1]['preloadedAuth']) {
return renderShell(<AppRouter />, { initialEntries, preloadedAuth });
}
describe('AppRouter', () => {
it('unauthenticated / redirects to /login', () => {
renderRouter(['/'], { token: null, user: null });
// 登录页含「用户登录」标题
expect(screen.getByText('用户登录')).toBeInTheDocument();
});
it('authenticated / renders HomePage shell', () => {
renderRouter(['/'], { token: 't', user: ADMIN });
expect(screen.getByText('KPI监控')).toBeInTheDocument();
expect(screen.getByRole('button', { name: '全部导航' })).toBeInTheDocument();
});
it('authenticated /usr/users renders under AppLayout', () => {
renderRouter(['/usr/users'], { token: 't', user: ADMIN });
// 外壳顶栏在;用户列表标签激活(占位内容由 FE-03 落地)
expect(screen.getByRole('button', { name: '全部导航' })).toBeInTheDocument();
expect(screen.getByTestId('tab-userlist').getAttribute('aria-pressed')).toBe('true');
});
it('authenticated /login redirects to /', () => {
renderRouter(['/login'], { token: 't', user: ADMIN });
expect(screen.getByText('KPI监控')).toBeInTheDocument();
});
it('unknown protected path redirects to /', () => {
renderRouter(['/no/such/path'], { token: 't', user: ADMIN });
expect(screen.getByText('KPI监控')).toBeInTheDocument();
});
});