UserInfoModal.test.tsx 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { render, screen, fireEvent } from '@testing-library/react';
  2. import UserInfoModal from '../UserInfoModal';
  3. import { AuthProvider } from '@/client/home/hooks/AuthProvider';
  4. // Mock useAuth
  5. jest.mock('@/client/home-shadcn/hooks/AuthProvider', () => ({
  6. useAuth: () => ({
  7. user: {
  8. id: 1,
  9. username: 'testuser',
  10. nickname: '测试用户',
  11. email: 'test@example.com',
  12. phone: '13800138000',
  13. userType: 'premium',
  14. remainingCount: 500,
  15. expireAt: '2025-12-31T23:59:59Z',
  16. createdAt: '2024-01-01T00:00:00Z'
  17. },
  18. isAuthenticated: true,
  19. logout: jest.fn()
  20. })
  21. }));
  22. describe('UserInfoModal', () => {
  23. const mockOnClose = jest.fn();
  24. it('renders correctly when open', () => {
  25. render(
  26. <AuthProvider>
  27. <UserInfoModal isOpen={true} onClose={mockOnClose} />
  28. </AuthProvider>
  29. );
  30. expect(screen.getByText('用户中心')).toBeInTheDocument();
  31. expect(screen.getByText('测试用户')).toBeInTheDocument();
  32. expect(screen.getByText('@testuser')).toBeInTheDocument();
  33. });
  34. it('displays tabs correctly', () => {
  35. render(
  36. <AuthProvider>
  37. <UserInfoModal isOpen={true} onClose={mockOnClose} />
  38. </AuthProvider>
  39. );
  40. expect(screen.getByText('个人信息')).toBeInTheDocument();
  41. expect(screen.getByText('密码修改')).toBeInTheDocument();
  42. expect(screen.getByText('充值记录')).toBeInTheDocument();
  43. });
  44. it('closes when close button is clicked', () => {
  45. render(
  46. <AuthProvider>
  47. <UserInfoModal isOpen={true} onClose={mockOnClose} />
  48. </AuthProvider>
  49. );
  50. fireEvent.click(screen.getByText('✕'));
  51. expect(mockOnClose).toHaveBeenCalled();
  52. });
  53. it('does not render when closed', () => {
  54. const { container } = render(
  55. <AuthProvider>
  56. <UserInfoModal isOpen={false} onClose={mockOnClose} />
  57. </AuthProvider>
  58. );
  59. expect(container.querySelector('.fixed')).not.toBeInTheDocument();
  60. });
  61. });