blob: 6c588fd2d5c48dbd935406f9dbf66c59dc1ef3b4 [file] [log] [blame] [edit]
// TorrentList.test.jsx
import React from 'react';
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
import TorrentList from '../components/TorrentList';
import axios from 'axios';
import { MemoryRouter } from 'react-router-dom'; // ✅ 引入 MemoryRouter
import { vi } from 'vitest';
beforeAll(() => {
Object.defineProperty(window, 'matchMedia', {
writable: true,
value: vi.fn().mockImplementation((query) => ({
matches: false,
media: query,
onchange: null,
addListener: vi.fn(),
removeListener: vi.fn(),
addEventListener: vi.fn(),
removeEventListener: vi.fn(),
dispatchEvent: vi.fn(),
})),
});
});
vi.mock('axios');
describe('TorrentList - 搜索功能', () => {
test('搜索关键词后应正确调用接口并显示结果', async () => {
const mockTorrents = [
{ id: 1, title: '测试种子1', uploader_id: 123 },
{ id: 2, title: '测试种子2', uploader_id: 456 },
];
axios.get.mockResolvedValueOnce({ data: mockTorrents });
render(
<MemoryRouter>
<TorrentList />
</MemoryRouter>
);
// 输入关键词
const input = screen.getByPlaceholderText(/搜索种子/i);
fireEvent.change(input, { target: { value: '测试' } });
// 模拟点击搜索按钮
const button = screen.getByRole('button', { name: /搜\s*索/i });
fireEvent.click(button);
// 等待并断言结果被渲染
await waitFor(() => {
expect(axios.get).toHaveBeenCalledWith(
'http://localhost:8080/torrent/search',
{ params: { keyword: '测试' } }
);
});
// expect(await screen.findByText('测试种子1')).toBeInTheDocument();
// expect(await screen.findByText('测试种子2')).toBeInTheDocument();
});
});