| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import { describe, expect, it } from 'vitest';
- import { findMenuByPath, findRootMenuByPath } from './find-menu-by-path';
- // 示例菜单数据
- const menus: any[] = [
- { path: '/', children: [] },
- { path: '/about', children: [] },
- {
- path: '/contact',
- children: [
- { path: '/contact/email', children: [] },
- { path: '/contact/phone', children: [] },
- ],
- },
- {
- path: '/services',
- children: [
- { path: '/services/design', children: [] },
- {
- path: '/services/development',
- children: [{ path: '/services/development/web', children: [] }],
- },
- ],
- },
- ];
- describe('menu Finder Tests', () => {
- it('finds a top-level menu', () => {
- const menu = findMenuByPath(menus, '/about');
- expect(menu).toBeDefined();
- expect(menu?.path).toBe('/about');
- });
- it('finds a nested menu', () => {
- const menu = findMenuByPath(menus, '/services/development/web');
- expect(menu).toBeDefined();
- expect(menu?.path).toBe('/services/development/web');
- });
- it('returns null for a non-existent path', () => {
- const menu = findMenuByPath(menus, '/non-existent');
- expect(menu).toBeNull();
- });
- it('handles empty menus list', () => {
- const menu = findMenuByPath([], '/about');
- expect(menu).toBeNull();
- });
- it('handles menu items without children', () => {
- const menu = findMenuByPath(
- [{ path: '/only', children: undefined }] as any[],
- '/only',
- );
- expect(menu).toBeDefined();
- expect(menu?.path).toBe('/only');
- });
- it('finds root menu by path', () => {
- const { findMenu, rootMenu, rootMenuPath } = findRootMenuByPath(
- menus,
- '/services/development/web',
- );
- expect(findMenu).toBeDefined();
- expect(rootMenu).toBeUndefined();
- expect(rootMenuPath).toBeUndefined();
- expect(findMenu?.path).toBe('/services/development/web');
- });
- it('returns null for undefined or empty path', () => {
- const menuUndefinedPath = findMenuByPath(menus);
- const menuEmptyPath = findMenuByPath(menus, '');
- expect(menuUndefinedPath).toBeNull();
- expect(menuEmptyPath).toBeNull();
- });
- it('checks for root menu when path does not exist', () => {
- const { findMenu, rootMenu, rootMenuPath } = findRootMenuByPath(
- menus,
- '/non-existent',
- );
- expect(findMenu).toBeNull();
- expect(rootMenu).toBeUndefined();
- expect(rootMenuPath).toBeUndefined();
- });
- });
|