// @ts-nocheck import { describe, expect, it, vi, afterEach } from 'vitest'; import { cleanup } from '@testing-library/svelte'; import { render, screen } from '@testing-library/svelte'; import ProjectMetricRow from '../components/ProjectMetricRow.svelte'; // Leader round2: 首页改为指标卡行——当前项目数、数据集总数、 // 运行中/已完成回测数、AI 用量;取不到的字段占位 "-"。 // 真实渲染断言,测试数据通过 props 注入。 afterEach(() => cleanup()); const projects = [{ id: 'p1' }, { id: 'p2' }, { id: 'p3' }]; const datasets = [{ id: 'd1' }, { id: 'd2' }]; const runs = [ { id: 'r1', status: 'running', result: null }, { id: 'r2', status: 'queued', result: null }, { id: 'r3', status: 'succeeded', result: { metrics: {} } }, { id: 'r4', status: 'succeeded', result: { metrics: {} } } ]; describe('ProjectMetricRow (real render, 4 metric cards)', () => { it('renders a metric-card row: 项目/数据集/回测 running+done/AI 用量, values visible', () => { const { container } = render(ProjectMetricRow, { props: { projects, datasets, runs, usage: { totals: { input_tokens: 1200, output_tokens: 340, requests: 7 } } } }); const cards = container.querySelectorAll('[data-testid="metric-card"]'); expect(cards.length).toBe(4); expect(screen.getByText('我的项目')).toBeTruthy(); expect(screen.getByText('数据集')).toBeTruthy(); expect(screen.getByText('回测')).toBeTruthy(); expect(screen.getByText('AI 用量')).toBeTruthy(); // 数字直接可见:项目卡/数据集卡与回测拆分值 const values = [...container.querySelectorAll('[data-testid="metric-value"]')].map((n) => n.textContent!.replace(/\s+/g, ' ').trim()); expect(values[0]).toBe('3'); expect(values[1]).toBe('2'); expect(values[2]).toContain('运行中'); expect(values[2]).toContain('2'); expect(values[2]).toContain('已完成'); expect(values[2]).toContain('2'); expect(screen.getByText('7 次')).toBeTruthy(); }); it('usage unavailable → "-" placeholder + TODO marker on the card', () => { const { container } = render(ProjectMetricRow, { props: { projects, datasets, runs, usage: null } }); const cards = [...container.querySelectorAll('[data-testid="metric-card"]')]; const usage = cards.at(-1)!; expect(usage.textContent).toContain('-'); expect(usage.getAttribute('data-todo') ?? '').toContain('TODO'); }); it('runs card splits 运行中 / 已完成', () => { render(ProjectMetricRow, { props: { projects, datasets, runs, usage: null } }); expect(screen.getByText(/运行中/)).toBeTruthy(); expect(screen.getByText(/已完成/)).toBeTruthy(); }); });