blob: 4bd690ec89e4bed1d7fece72b48faa11df652f09 [file] [log] [blame]
San3yuan03ab0642025-04-29 18:00:25 +08001import SelfStatus from '@/components/selfStatus/selfStatus';
2import { render, screen } from '@testing-library/react';
3import { useSelector } from 'react-redux';
4import React from 'react';
5import '@testing-library/jest-dom';
6import { useAppSelector } from '@/hooks/store';
7
8jest.mock('@/hooks/request', () => ({
9 useApi: jest.fn(),
10 }));
11 // 模拟所有外部依赖
12 jest.mock('@/hooks/store', () => ({
13 useAppDispatch: jest.fn(),
14 useAppSelector: jest.fn(),
15 }));
16
17 jest.mock('react-router', () => ({
18 useNavigate: jest.fn(),
19 }));
20
21 jest.mock('react-redux', () => ({
22 useSelector: jest.fn(),
23 }));
24
25
26describe('SelfStatus Component', () => {
27 it('renders correctly', () => {
28 (useAppSelector as jest.Mock).mockImplementation((selector) => selector({
29 user: {
30 userId: '001',
31 userName: 'san3yuan',
32 role: 'manager',
33 uploadTraffic: 0,
34 downloadTraffic: 0,
35 downloadPoints: 0,
36 },
37 setting: {
38 theme: 'light',
39 },
40 }));
41
42 render(<SelfStatus />);
43
44 expect(screen.getByText('san3yuan')).toBeInTheDocument();
45 expect(screen.getByText('用户组: manager')).toBeInTheDocument();
46 expect(screen.getByText('上传量: 0')).toBeInTheDocument();
47 expect(screen.getByText('下载量: 0')).toBeInTheDocument();
48 expect(screen.getByText('下载积分: 0')).toBeInTheDocument();
49 })
50 it('calculates and displays share ratio correctly', () => {
51 (useAppSelector as jest.Mock).mockImplementation((selector) => selector({
52 user: {
53 uploadTraffic: 100,
54 downloadTraffic: 50,
55 },
56 }));
57 render(<SelfStatus />);
58 expect(screen.getByText('分享率: 2.00')).toBeInTheDocument();
59 });
60 it('handles empty data gracefully', () => {
61 (useAppSelector as jest.Mock).mockImplementation((selector) => selector({
62 user: {
63 userName: '',
64 role: '',
65 uploadTraffic: null,
66 downloadTraffic: null,
67 downloadPoints: null,
68 },
69 }));
70 render(<SelfStatus />);
71 expect(screen.getByText('用户组: N/A')).toBeInTheDocument();
72 expect(screen.getByText('上传量: 0')).toBeInTheDocument();
73 expect(screen.getByText('下载量: 0')).toBeInTheDocument();
74 expect(screen.getByText('分享率: N/A')).toBeInTheDocument();
75 expect(screen.getByText('下载积分: 0')).toBeInTheDocument();
76 });
77});