添加了相关测试文件,引入Tailwindcss

Change-Id: I12054143571bb688590af0357125a0ed26ff2050
diff --git a/src/components/PermissionControl.test.jsx b/src/components/PermissionControl.test.jsx
new file mode 100644
index 0000000..fb417cd
--- /dev/null
+++ b/src/components/PermissionControl.test.jsx
@@ -0,0 +1,51 @@
+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();
+  });
+});
\ No newline at end of file