| import SelfStatus from '@/components/selfStatus/selfStatus'; |
| import { render, screen } from '@testing-library/react'; |
| import { useSelector } from 'react-redux'; |
| import React from 'react'; |
| import '@testing-library/jest-dom'; |
| import { useAppSelector } from '@/hooks/store'; |
| |
| jest.mock('@/hooks/request', () => ({ |
| useApi: jest.fn(), |
| })); |
| // 模拟所有外部依赖 |
| jest.mock('@/hooks/store', () => ({ |
| useAppDispatch: jest.fn(), |
| useAppSelector: jest.fn(), |
| })); |
| |
| jest.mock('react-router', () => ({ |
| useNavigate: jest.fn(), |
| })); |
| |
| jest.mock('react-redux', () => ({ |
| useSelector: jest.fn(), |
| })); |
| |
| |
| describe('SelfStatus Component', () => { |
| it('renders correctly', () => { |
| (useAppSelector as jest.Mock).mockImplementation((selector) => selector({ |
| user: { |
| userId: '001', |
| userName: 'san3yuan', |
| role: 'manager', |
| uploadTraffic: 0, |
| downloadTraffic: 0, |
| downloadPoints: 0, |
| }, |
| setting: { |
| theme: 'light', |
| }, |
| })); |
| |
| render(<SelfStatus />); |
| |
| expect(screen.getByText('san3yuan')).toBeInTheDocument(); |
| expect(screen.getByText('用户组: manager')).toBeInTheDocument(); |
| expect(screen.getByText('上传量: 0')).toBeInTheDocument(); |
| expect(screen.getByText('下载量: 0')).toBeInTheDocument(); |
| expect(screen.getByText('下载积分: 0')).toBeInTheDocument(); |
| }) |
| it('calculates and displays share ratio correctly', () => { |
| (useAppSelector as jest.Mock).mockImplementation((selector) => selector({ |
| user: { |
| uploadTraffic: 100, |
| downloadTraffic: 50, |
| }, |
| })); |
| render(<SelfStatus />); |
| expect(screen.getByText('分享率: 2.00')).toBeInTheDocument(); |
| }); |
| it('handles empty data gracefully', () => { |
| (useAppSelector as jest.Mock).mockImplementation((selector) => selector({ |
| user: { |
| userName: '', |
| role: '', |
| uploadTraffic: null, |
| downloadTraffic: null, |
| downloadPoints: null, |
| }, |
| })); |
| render(<SelfStatus />); |
| expect(screen.getByText('用户组: N/A')).toBeInTheDocument(); |
| expect(screen.getByText('上传量: 0')).toBeInTheDocument(); |
| expect(screen.getByText('下载量: 0')).toBeInTheDocument(); |
| expect(screen.getByText('分享率: N/A')).toBeInTheDocument(); |
| expect(screen.getByText('下载积分: 0')).toBeInTheDocument(); |
| }); |
| }); |