import { render, screen } from '@testing-library/react'; import { describe, it, expect, vi } from 'vitest'; import { UsageChart } from '@/pages/Stats/UsageChart'; import type { UsageStats } from '@/types'; // Mock Recharts components vi.mock('recharts', () => ({ ResponsiveContainer: vi.fn(({ children }) =>
{children}
), LineChart: vi.fn(() =>
), Line: vi.fn(() => null), XAxis: vi.fn(() => null), YAxis: vi.fn(() => null), CartesianGrid: vi.fn(() => null), Tooltip: vi.fn(() => null), })); const mockStats: UsageStats[] = [ { id: 1, providerId: 'openai', modelName: 'gpt-4o', requestCount: 100, date: '2024-01-01', }, { id: 2, providerId: 'openai', modelName: 'gpt-3.5-turbo', requestCount: 200, date: '2024-01-01', }, { id: 3, providerId: 'anthropic', modelName: 'claude-3', requestCount: 150, date: '2024-01-02', }, ]; describe('UsageChart', () => { it('renders chart title', () => { render(); expect(screen.getByText('请求趋势')).toBeInTheDocument(); }); it('renders with data', () => { const { container } = render(); // TDesign Card component expect(container.querySelector('.t-card')).toBeInTheDocument(); // Mocked chart container expect(screen.getByTestId('mock-chart-container')).toBeInTheDocument(); }); it('renders empty state when no data', () => { render(); expect(screen.getByText('暂无数据')).toBeInTheDocument(); }); it('aggregates data by date correctly', () => { const { container } = render(); // TDesign Card component expect(container.querySelector('.t-card')).toBeInTheDocument(); // Mocked chart should render expect(screen.getByTestId('mock-chart-container')).toBeInTheDocument(); }); });