MenuItem.test.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import React from 'react'
  2. import { render, screen, fireEvent } from '@testing-library/react'
  3. import '@testing-library/jest-dom'
  4. import { MenuItem } from '../../src/components/MenuItem'
  5. describe('MenuItem', () => {
  6. const mockProps = {
  7. title: '修改个人信息',
  8. icon: 'i-heroicons-user-20-solid',
  9. bgColor: 'bg-blue-100',
  10. iconColor: 'text-blue-500',
  11. onPress: jest.fn()
  12. }
  13. beforeEach(() => {
  14. jest.clearAllMocks()
  15. })
  16. it('应该渲染菜单项标题', () => {
  17. render(<MenuItem {...mockProps} />)
  18. expect(screen.getByText('修改个人信息')).toBeInTheDocument()
  19. })
  20. it('应该渲染图标', () => {
  21. const { container } = render(<MenuItem {...mockProps} />)
  22. const icon = container.querySelector('.i-heroicons-user-20-solid')
  23. expect(icon).toBeInTheDocument()
  24. })
  25. it('应该应用正确的背景颜色类', () => {
  26. const { container } = render(<MenuItem {...mockProps} />)
  27. const bgElement = container.querySelector('.bg-blue-100')
  28. expect(bgElement).toBeInTheDocument()
  29. })
  30. it('应该渲染右箭头', () => {
  31. const { container } = render(<MenuItem {...mockProps} />)
  32. const arrow = container.querySelector('.i-heroicons-chevron-right-20-solid')
  33. expect(arrow).toBeInTheDocument()
  34. })
  35. it('点击时应该调用onPress', () => {
  36. render(<MenuItem {...mockProps} />)
  37. const menuItem = screen.getByText('修改个人信息').closest('.flex')
  38. if (menuItem) {
  39. fireEvent.click(menuItem)
  40. }
  41. expect(mockProps.onPress).toHaveBeenCalledTimes(1)
  42. })
  43. it('应该使用不同的图标颜色', () => {
  44. const greenProps = { ...mockProps, bgColor: 'bg-green-100', iconColor: 'text-green-500' }
  45. const { container } = render(<MenuItem {...greenProps} />)
  46. const greenElement = container.querySelector('.text-green-500')
  47. expect(greenElement).toBeInTheDocument()
  48. })
  49. })