import React from 'react' import { render, screen, fireEvent } from '@testing-library/react' import '@testing-library/jest-dom' import { MenuSection } from '../../src/components/MenuSection' describe('MenuSection', () => { const mockSection = { title: undefined, items: [ { id: 'item1', title: '修改个人信息', icon: 'i-heroicons-user-20-solid', bgColor: 'bg-blue-100', iconColor: 'text-blue-500', onPress: jest.fn() }, { id: 'item2', title: '账号与安全', icon: 'i-heroicons-shield-check-20-solid', bgColor: 'bg-green-100', iconColor: 'text-green-500', onPress: jest.fn() } ] } beforeEach(() => { jest.clearAllMocks() }) it('应该渲染所有菜单项', () => { render() expect(screen.getByText('修改个人信息')).toBeInTheDocument() expect(screen.getByText('账号与安全')).toBeInTheDocument() }) it('应该渲染分组标题(如果存在)', () => { const sectionWithTitle = { ...mockSection, title: '功能设置' } render() expect(screen.getByText('功能设置')).toBeInTheDocument() }) it('点击菜单项应该调用对应的onPress', () => { render() const item1 = screen.getByText('修改个人信息').closest('.flex') if (item1) { fireEvent.click(item1) } expect(mockSection.items[0].onPress).toHaveBeenCalledTimes(1) }) it('应该渲染所有菜单项的图标', () => { const { container } = render() const icons = container.querySelectorAll('.i-heroicons-user-20-solid, .i-heroicons-shield-check-20-solid') expect(icons.length).toBe(2) }) it('应该渲染所有菜单项的右箭头', () => { const { container } = render() const arrows = container.querySelectorAll('.i-heroicons-chevron-right-20-solid') expect(arrows.length).toBe(2) }) })