123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- import { describe, expect, it, vi } from 'vitest';
- import { generateMenus } from './generate-menus'; // 替换为您的实际路径
- import {
- type RouteRecordRaw,
- type Router,
- createRouter,
- createWebHistory,
- } from 'vue-router';
- // Nested route setup to test child inclusion and hideChildrenInMenu functionality
- describe('generateMenus', () => {
- // 模拟路由数据
- const mockRoutes = [
- {
- meta: { icon: 'home-icon', title: '首页' },
- name: 'home',
- path: '/home',
- },
- {
- meta: { hideChildrenInMenu: true, icon: 'about-icon', title: '关于' },
- name: 'about',
- path: '/about',
- children: [
- {
- path: 'team',
- name: 'team',
- meta: { icon: 'team-icon', title: '团队' },
- },
- ],
- },
- ] as RouteRecordRaw[];
- // 模拟 Vue 路由器实例
- const mockRouter = {
- getRoutes: vi.fn(() => [
- { name: 'home', path: '/home' },
- { name: 'about', path: '/about' },
- { name: 'team', path: '/about/team' },
- ]),
- };
- it('the correct menu list should be generated according to the route', async () => {
- const expectedMenus = [
- {
- badge: undefined,
- badgeType: undefined,
- badgeVariants: undefined,
- icon: 'home-icon',
- name: '首页',
- order: undefined,
- parent: undefined,
- parents: undefined,
- path: '/home',
- show: true,
- children: [],
- },
- {
- badge: undefined,
- badgeType: undefined,
- badgeVariants: undefined,
- icon: 'about-icon',
- name: '关于',
- order: undefined,
- parent: undefined,
- parents: undefined,
- path: '/about',
- show: true,
- children: [],
- },
- ];
- const menus = await generateMenus(mockRoutes, mockRouter as any);
- expect(menus).toEqual(expectedMenus);
- });
- it('includes additional meta properties in menu items', async () => {
- const mockRoutesWithMeta = [
- {
- meta: { icon: 'user-icon', order: 1, title: 'Profile' },
- name: 'profile',
- path: '/profile',
- },
- ] as RouteRecordRaw[];
- const menus = await generateMenus(mockRoutesWithMeta, mockRouter as any);
- expect(menus).toEqual([
- {
- badge: undefined,
- badgeType: undefined,
- badgeVariants: undefined,
- icon: 'user-icon',
- name: 'Profile',
- order: 1,
- parent: undefined,
- parents: undefined,
- path: '/profile',
- show: true,
- children: [],
- },
- ]);
- });
- it('handles dynamic route parameters correctly', async () => {
- const mockRoutesWithParams = [
- {
- meta: { icon: 'details-icon', title: 'User Details' },
- name: 'userDetails',
- path: '/users/:userId',
- },
- ] as RouteRecordRaw[];
- const menus = await generateMenus(mockRoutesWithParams, mockRouter as any);
- expect(menus).toEqual([
- {
- badge: undefined,
- badgeType: undefined,
- badgeVariants: undefined,
- icon: 'details-icon',
- name: 'User Details',
- order: undefined,
- parent: undefined,
- parents: undefined,
- path: '/users/:userId',
- show: true,
- children: [],
- },
- ]);
- });
- it('processes routes with redirects correctly', async () => {
- const mockRoutesWithRedirect = [
- {
- name: 'redirectedRoute',
- path: '/old-path',
- redirect: '/new-path',
- },
- {
- meta: { icon: 'path-icon', title: 'New Path' },
- name: 'newPath',
- path: '/new-path',
- },
- ] as RouteRecordRaw[];
- const menus = await generateMenus(
- mockRoutesWithRedirect,
- mockRouter as any,
- );
- expect(menus).toEqual([
- // Assuming your generateMenus function excludes redirect routes from the menu
- {
- badge: undefined,
- badgeType: undefined,
- badgeVariants: undefined,
- icon: undefined,
- name: 'redirectedRoute',
- order: undefined,
- parent: undefined,
- parents: undefined,
- path: '/old-path',
- show: true,
- children: [],
- },
- {
- badge: undefined,
- badgeType: undefined,
- badgeVariants: undefined,
- icon: 'path-icon',
- name: 'New Path',
- order: undefined,
- parent: undefined,
- parents: undefined,
- path: '/new-path',
- show: true,
- children: [],
- },
- ]);
- });
- const routes: any = [
- {
- meta: { order: 2, title: 'Home' },
- name: 'home',
- path: '/',
- },
- {
- meta: { order: 1, title: 'About' },
- name: 'about',
- path: '/about',
- },
- ];
- const router: Router = createRouter({
- history: createWebHistory(),
- routes,
- });
- it('should generate menu list with correct order', async () => {
- const menus = await generateMenus(routes, router);
- const expectedMenus = [
- {
- badge: undefined,
- badgeType: undefined,
- badgeVariants: undefined,
- icon: undefined,
- name: 'About',
- order: 1,
- parent: undefined,
- parents: undefined,
- path: '/about',
- show: true,
- children: [],
- },
- {
- badge: undefined,
- badgeType: undefined,
- badgeVariants: undefined,
- icon: undefined,
- name: 'Home',
- order: 2,
- parent: undefined,
- parents: undefined,
- path: '/',
- show: true,
- children: [],
- },
- ];
- expect(menus).toEqual(expectedMenus);
- });
- it('should handle empty routes', async () => {
- const emptyRoutes: any[] = [];
- const menus = await generateMenus(emptyRoutes, router);
- expect(menus).toEqual([]);
- });
- });
|