pay-success-page.test.tsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /**
  2. * 支付成功页面组件测试
  3. */
  4. import React from 'react'
  5. import { render, screen, fireEvent } from '@testing-library/react'
  6. import '@testing-library/jest-dom'
  7. import PaySuccessPage from '@/pages/pay-success/index'
  8. // Mock Taro相关API
  9. const mockNavigateTo = jest.fn()
  10. const mockUseRouter = jest.fn()
  11. const mockUseLoad = jest.fn()
  12. jest.mock('@tarojs/taro', () => ({
  13. useRouter: () => mockUseRouter(),
  14. navigateTo: mockNavigateTo,
  15. useLoad: (callback: any) => mockUseLoad(callback)
  16. }))
  17. describe('PaySuccessPage', () => {
  18. beforeEach(() => {
  19. mockUseRouter.mockReturnValue({
  20. params: {
  21. totalPrice: '100',
  22. passengerCount: '2',
  23. orderId: '123'
  24. }
  25. })
  26. mockUseLoad.mockImplementation((callback) => {
  27. if (callback) callback()
  28. })
  29. mockNavigateTo.mockClear()
  30. })
  31. it('should render payment success page correctly', () => {
  32. render(<PaySuccessPage />)
  33. expect(screen.getByText('支付成功!')).toBeInTheDocument()
  34. expect(screen.getByText('感谢您的信任与支持')).toBeInTheDocument()
  35. expect(screen.getByText('¥100')).toBeInTheDocument()
  36. expect(screen.getByText('2张')).toBeInTheDocument()
  37. })
  38. it('should handle view order button click', () => {
  39. render(<PaySuccessPage />)
  40. const viewOrderButton = screen.getByText('查看订单')
  41. fireEvent.click(viewOrderButton)
  42. expect(mockNavigateTo).toHaveBeenCalledWith({
  43. url: '/pages/orders/orders'
  44. })
  45. })
  46. it('should handle back to home button click', () => {
  47. render(<PaySuccessPage />)
  48. const backToHomeButton = screen.getByText('返回首页')
  49. fireEvent.click(backToHomeButton)
  50. expect(mockNavigateTo).toHaveBeenCalledWith({
  51. url: '/pages/home/index'
  52. })
  53. })
  54. it('should handle missing parameters gracefully', () => {
  55. mockUseRouter.mockReturnValue({
  56. params: {} // 缺少参数
  57. })
  58. render(<PaySuccessPage />)
  59. // 应该使用默认值渲染
  60. expect(screen.getByText('¥0')).toBeInTheDocument()
  61. expect(screen.getByText('0张')).toBeInTheDocument()
  62. })
  63. it('should log order ID on load', () => {
  64. const consoleSpy = jest.spyOn(console, 'log')
  65. render(<PaySuccessPage />)
  66. expect(consoleSpy).toHaveBeenCalledWith('支付成功页面加载,订单ID:', '123')
  67. consoleSpy.mockRestore()
  68. })
  69. it('should display correct payment information', () => {
  70. mockUseRouter.mockReturnValue({
  71. params: {
  72. totalPrice: '250.5',
  73. passengerCount: '3',
  74. orderId: '456'
  75. }
  76. })
  77. render(<PaySuccessPage />)
  78. expect(screen.getByText('¥250.5')).toBeInTheDocument()
  79. expect(screen.getByText('3张')).toBeInTheDocument()
  80. })
  81. it('should have proper navigation structure', () => {
  82. render(<PaySuccessPage />)
  83. // 检查导航栏
  84. expect(screen.getByText('支付成功')).toBeInTheDocument()
  85. // 检查按钮布局
  86. const buttons = screen.getAllByRole('button')
  87. expect(buttons).toHaveLength(2)
  88. expect(screen.getByText('返回首页')).toBeInTheDocument()
  89. expect(screen.getByText('查看订单')).toBeInTheDocument()
  90. })
  91. it('should handle navigation back', () => {
  92. const mockNavigateBack = jest.fn()
  93. jest.doMock('@tarojs/taro', () => ({
  94. useRouter: () => mockUseRouter(),
  95. navigateTo: mockNavigateTo,
  96. useLoad: (callback: any) => mockUseLoad(callback),
  97. navigateBack: mockNavigateBack
  98. }))
  99. render(<PaySuccessPage />)
  100. // 这里需要模拟导航栏返回按钮的点击
  101. // 由于组件结构,可能需要通过不同的方式触发
  102. })
  103. })