pay-success-page.test.tsx 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /**
  2. * 支付成功页面组件测试
  3. */
  4. import { render, screen, fireEvent } from '@testing-library/react'
  5. import '@testing-library/jest-dom'
  6. import PaySuccessPage from '@/pages/pay-success/index'
  7. import { mockSwitchTab, mockUseRouter, mockUseLoad } from '../__mocks__/taroMock'
  8. describe('PaySuccessPage', () => {
  9. beforeEach(() => {
  10. mockUseRouter.mockReturnValue({
  11. params: {
  12. totalPrice: '100',
  13. passengerCount: '2',
  14. orderId: '123'
  15. }
  16. })
  17. mockUseLoad.mockImplementation((callback) => {
  18. if (callback) callback()
  19. })
  20. mockSwitchTab.mockClear()
  21. })
  22. it('应该正确渲染支付成功页面', () => {
  23. render(<PaySuccessPage />)
  24. expect(screen.getByText('支付成功!')).toBeInTheDocument()
  25. expect(screen.getByText('感谢您的信任与支持')).toBeInTheDocument()
  26. expect(screen.getByText('¥100')).toBeInTheDocument()
  27. expect(screen.getByText('2张')).toBeInTheDocument()
  28. })
  29. it('应该处理查看订单按钮点击', () => {
  30. render(<PaySuccessPage />)
  31. const viewOrderButton = screen.getByText('查看订单')
  32. fireEvent.click(viewOrderButton)
  33. expect(mockSwitchTab).toHaveBeenCalledWith({
  34. url: '/pages/orders/index'
  35. })
  36. })
  37. it('应该处理返回首页按钮点击', () => {
  38. render(<PaySuccessPage />)
  39. const backToHomeButton = screen.getByText('返回首页')
  40. fireEvent.click(backToHomeButton)
  41. expect(mockSwitchTab).toHaveBeenCalledWith({
  42. url: '/pages/home/index'
  43. })
  44. })
  45. it('应该优雅处理缺少参数的情况', () => {
  46. mockUseRouter.mockReturnValue({
  47. params: {} // 缺少参数
  48. })
  49. render(<PaySuccessPage />)
  50. // 应该使用默认值渲染
  51. expect(screen.getByText('¥0')).toBeInTheDocument()
  52. expect(screen.getByText('0张')).toBeInTheDocument()
  53. })
  54. it('应该在加载时记录订单ID', () => {
  55. const consoleSpy = jest.spyOn(console, 'log')
  56. render(<PaySuccessPage />)
  57. expect(consoleSpy).toHaveBeenCalledWith('支付成功页面加载,订单ID:', '123')
  58. consoleSpy.mockRestore()
  59. })
  60. it('应该显示正确的支付信息', () => {
  61. mockUseRouter.mockReturnValue({
  62. params: {
  63. totalPrice: '250.5',
  64. passengerCount: '3',
  65. orderId: '456'
  66. }
  67. })
  68. render(<PaySuccessPage />)
  69. expect(screen.getByText('¥250.5')).toBeInTheDocument()
  70. expect(screen.getByText('3张')).toBeInTheDocument()
  71. })
  72. it('应该具有正确的导航结构', () => {
  73. render(<PaySuccessPage />)
  74. // 检查导航栏
  75. expect(screen.getByText('支付成功')).toBeInTheDocument()
  76. // 检查按钮布局
  77. const buttons = screen.getAllByRole('button')
  78. expect(buttons).toHaveLength(2)
  79. expect(screen.getByText('返回首页')).toBeInTheDocument()
  80. expect(screen.getByText('查看订单')).toBeInTheDocument()
  81. })
  82. it('应该处理导航返回', () => {
  83. // 这个测试目前没有实际功能,因为组件中没有使用 navigateBack
  84. // 如果需要测试导航返回功能,需要先实现对应的组件逻辑
  85. })
  86. })