blob: 1087fa66603dea9a2a6656d24feafd0b7805b1f5 [file] [log] [blame]
阳菜,放晴!7e1e3a52025-06-05 23:00:51 +08001import React from 'react';
2import { render, screen, waitFor } from '@testing-library/react';
3import '@testing-library/jest-dom';
4import Homepage from '@/views/homepage/homepage';
5import { useApi } from '@/hooks/request';
6import { useSelector } from 'react-redux';
7import { useNavigate } from 'react-router';
8
9jest.mock('@/hooks/request', () => ({
10 useApi: jest.fn(),
11}));
12
13jest.mock('react-redux', () => ({
14 useSelector: jest.fn(),
15}));
16
17jest.mock('react-router', () => ({
18 useNavigate: jest.fn(),
19}));
20
21const mockUseApi = useApi as jest.MockedFunction<typeof useApi>;
22const mockUseSelector = useSelector as jest.MockedFunction<typeof useSelector>;
23const mockUseNavigate = useNavigate as jest.MockedFunction<typeof useNavigate>;
24
25describe('Homepage Component', () => {
26 const mockRefresh = jest.fn();
27 const mockNavigate = jest.fn();
28
29 beforeEach(() => {
30 mockUseNavigate.mockReturnValue(mockNavigate);
31 mockUseSelector.mockImplementation((selector) =>
32 selector({ user: { avatar: 'https://example.com/avatar.jpg' } })
33 );
34
35 mockUseApi.mockReturnValue({
36 data: {
37 username: '测试用户',
38 inviteCode: '123456',
39 stats: {
40 likes: 99,
41 following: 10,
42 followers: 20,
43 mutualFollows: 5,
44 },
45 upload: '15',
46 level: 'Lv3',
47 works: [
48 {
49 postId: 2,
50 userId: 0,
51 postTitle: '凡高',
52 postContent: '',
53 createdAt: 0,
54 postType: '',
55 viewCount: 100,
56 hotScore: 0.0,
57 lastCalculated: 0
58 },
59 ],
60 petImage: '',
61 trafficImage: '',
62 },
63 loading: false,
64 error: null,
65 refresh: mockRefresh,
66 });
67 });
68
69 afterEach(() => {
70 jest.clearAllMocks();
71 });
72
73 it('renders user stats and works correctly', async () => {
74 render(<Homepage />);
75
76 await waitFor(() => {
77 expect(screen.getByText('获赞')).toBeInTheDocument();
78 expect(screen.getByText('99')).toBeInTheDocument();
79
80 expect(screen.getByText('关注')).toBeInTheDocument();
81 expect(screen.getByText('10')).toBeInTheDocument();
82
83 expect(screen.getByText('粉丝')).toBeInTheDocument();
84 expect(screen.getByText('20')).toBeInTheDocument();
85
86 expect(screen.getByText('互关')).toBeInTheDocument();
87 expect(screen.getByText('5')).toBeInTheDocument();
88
89 expect(screen.getByText('您的总上传量为:')).toBeInTheDocument();
90 expect(screen.getByText('15')).toBeInTheDocument();
91
92 expect(screen.getByText('您的用户等级为:')).toBeInTheDocument();
93 expect(screen.getByText('Lv3')).toBeInTheDocument();
94
95 expect(screen.getByText('我的作品')).toBeInTheDocument();
96 expect(screen.getByText('凡高')).toBeInTheDocument();
97 expect(screen.getByText(/发布时间:0/)).toBeInTheDocument();
98 expect(screen.getByText(/下载量:100 做种数:待定/)).toBeInTheDocument();
99 });
100 });
101});