1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
// @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();
});
});
|