blob: fb417cde6c83188307476c53415540181ba8f7eb [file] [log] [blame]
import { describe, it, expect, beforeEach } from 'vitest';
import { render, screen } from '@testing-library/react';
import RoleBasedControl from './PermissionControl';
describe('RoleBasedControl 组件', () => {
beforeEach(() => {
window.localStorage.clear();
});
it('用户没有所需角色时不应该渲染内容', () => {
// 模拟普通用户
window.localStorage.setItem('user', JSON.stringify({ role: 'user' }));
const { container } = render(
<RoleBasedControl allowedRoles={['admin']}>
<div>管理员内容</div>
</RoleBasedControl>
);
// 不应该渲染任何内容
expect(container.firstChild).toBeNull();
});
it('用户有所需角色时应该渲染内容', () => {
// 模拟管理员
window.localStorage.setItem('user', JSON.stringify({ role: 'admin' }));
render(
<RoleBasedControl allowedRoles={['admin']}>
<div>管理员内容</div>
</RoleBasedControl>
);
// 应该看到管理员内容
expect(screen.getByText('管理员内容')).toBeInTheDocument();
});
it('多个允许的角色中有一个匹配时应该渲染内容', () => {
// 模拟版主
window.localStorage.setItem('user', JSON.stringify({ role: 'moderator' }));
render(
<RoleBasedControl allowedRoles={['admin', 'moderator']}>
<div>特权内容</div>
</RoleBasedControl>
);
// 应该看到特权内容
expect(screen.getByText('特权内容')).toBeInTheDocument();
});
});