blob: 1087fa66603dea9a2a6656d24feafd0b7805b1f5 [file] [log] [blame]
import React from 'react';
import { render, screen, waitFor } from '@testing-library/react';
import '@testing-library/jest-dom';
import Homepage from '@/views/homepage/homepage';
import { useApi } from '@/hooks/request';
import { useSelector } from 'react-redux';
import { useNavigate } from 'react-router';
jest.mock('@/hooks/request', () => ({
useApi: jest.fn(),
}));
jest.mock('react-redux', () => ({
useSelector: jest.fn(),
}));
jest.mock('react-router', () => ({
useNavigate: jest.fn(),
}));
const mockUseApi = useApi as jest.MockedFunction<typeof useApi>;
const mockUseSelector = useSelector as jest.MockedFunction<typeof useSelector>;
const mockUseNavigate = useNavigate as jest.MockedFunction<typeof useNavigate>;
describe('Homepage Component', () => {
const mockRefresh = jest.fn();
const mockNavigate = jest.fn();
beforeEach(() => {
mockUseNavigate.mockReturnValue(mockNavigate);
mockUseSelector.mockImplementation((selector) =>
selector({ user: { avatar: 'https://example.com/avatar.jpg' } })
);
mockUseApi.mockReturnValue({
data: {
username: '测试用户',
inviteCode: '123456',
stats: {
likes: 99,
following: 10,
followers: 20,
mutualFollows: 5,
},
upload: '15',
level: 'Lv3',
works: [
{
postId: 2,
userId: 0,
postTitle: '凡高',
postContent: '',
createdAt: 0,
postType: '',
viewCount: 100,
hotScore: 0.0,
lastCalculated: 0
},
],
petImage: '',
trafficImage: '',
},
loading: false,
error: null,
refresh: mockRefresh,
});
});
afterEach(() => {
jest.clearAllMocks();
});
it('renders user stats and works correctly', async () => {
render(<Homepage />);
await waitFor(() => {
expect(screen.getByText('获赞')).toBeInTheDocument();
expect(screen.getByText('99')).toBeInTheDocument();
expect(screen.getByText('关注')).toBeInTheDocument();
expect(screen.getByText('10')).toBeInTheDocument();
expect(screen.getByText('粉丝')).toBeInTheDocument();
expect(screen.getByText('20')).toBeInTheDocument();
expect(screen.getByText('互关')).toBeInTheDocument();
expect(screen.getByText('5')).toBeInTheDocument();
expect(screen.getByText('您的总上传量为:')).toBeInTheDocument();
expect(screen.getByText('15')).toBeInTheDocument();
expect(screen.getByText('您的用户等级为:')).toBeInTheDocument();
expect(screen.getByText('Lv3')).toBeInTheDocument();
expect(screen.getByText('我的作品')).toBeInTheDocument();
expect(screen.getByText('凡高')).toBeInTheDocument();
expect(screen.getByText(/发布时间:0/)).toBeInTheDocument();
expect(screen.getByText(/下载量:100 做种数:待定/)).toBeInTheDocument();
});
});
});