9097c48b1f
- 新增 dashboardFeatures.ts 和 useDashboard.ts 文件,封装仪表板功能的解析和状态管理逻辑。 - 更新 Dashboard 组件,使用 useDashboard 钩子简化可见工具和最近使用工具的处理。 - 添加仪表板功能的单元测试,确保功能正确性。 - 更新 README.md,移除不再使用的 ToolCard 组件说明。
50 lines
1.8 KiB
TypeScript
50 lines
1.8 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
import * as featureConfig from '@/config/features';
|
|
import { resolveDashboardFeatures } from '../dashboardFeatures';
|
|
|
|
describe('resolveDashboardFeatures', () => {
|
|
beforeEach(() => {
|
|
vi.restoreAllMocks();
|
|
});
|
|
|
|
it('应按 keys 顺序返回可见工具,并排除 dashboard', () => {
|
|
const items = resolveDashboardFeatures(['jwt', 'timestamp'], ['dashboard', 'timestamp', 'jwt']);
|
|
|
|
expect(items.map((item) => item.key)).toEqual(['jwt', 'timestamp']);
|
|
expect(items.map((item) => item.feature.label)).toEqual(['JWT 解析', '时间戳']);
|
|
});
|
|
|
|
it('缺少 themeColorKey 但有 icon 的工具仍应显示', () => {
|
|
const originalGetFeatureByKey = featureConfig.getFeatureByKey;
|
|
vi.spyOn(featureConfig, 'getFeatureByKey').mockImplementation((key) => {
|
|
const feature = originalGetFeatureByKey(key);
|
|
if (key === 'timestamp' && feature) {
|
|
return { ...feature, themeColorKey: undefined };
|
|
}
|
|
return feature;
|
|
});
|
|
|
|
const items = resolveDashboardFeatures(['timestamp'], ['dashboard', 'timestamp']);
|
|
|
|
expect(items.map((item) => item.key)).toEqual(['timestamp']);
|
|
});
|
|
|
|
it('应过滤不在 visiblePages 中的工具', () => {
|
|
const items = resolveDashboardFeatures(['jwt', 'timestamp'], ['dashboard', 'timestamp']);
|
|
|
|
expect(items.map((item) => item.key)).toEqual(['timestamp']);
|
|
});
|
|
|
|
it('visiblePages 无匹配工具时应返回空列表', () => {
|
|
const items = resolveDashboardFeatures(['jwt', 'timestamp'], ['dashboard']);
|
|
|
|
expect(items).toEqual([]);
|
|
});
|
|
|
|
it('应过滤缺少 icon 的工具', () => {
|
|
const items = resolveDashboardFeatures(['dashboard', 'timestamp'], ['dashboard', 'timestamp']);
|
|
|
|
expect(items.map((item) => item.key)).toEqual(['timestamp']);
|
|
});
|
|
});
|