import { Permission } from '@lingxi/shared'; import { cleanup, render, screen } from '@testing-library/react'; import { MemoryRouter, Route, Routes } from 'react-router'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; import { useAuthStore } from '@/stores/auth-store'; import { RequirePermission } from './RequirePermission'; const USER_ID = '01HZZZZZZZZZZZZZZZZZZZZZZZ'; function renderGuard(permissions: string[]): void { useAuthStore.getState().setSession({ accessToken: 'token', user: { id: USER_ID, name: '测试用户', account: 'test.user' }, permissions, }); render(
用户页面
} /> 无权限页面} />
, ); } describe('路由权限守卫', () => { afterEach(() => { cleanup(); }); beforeEach(() => { window.localStorage.clear(); useAuthStore.getState().clearSession(); }); it('有 user:view 时渲染子路由', () => { renderGuard([Permission.USER_VIEW]); expect(screen.getByText('用户页面')).toBeTruthy(); }); it('无权限时跳转 403,不渲染子路由', () => { renderGuard([Permission.SCRIPT_READ]); expect(screen.queryByText('用户页面')).toBeNull(); expect(screen.getByText('无权限页面')).toBeTruthy(); }); });