Files
Genarrative/apps/ai-game-creator-shell/tests/directProjectTurn.test.tsx
T
k88936 594063a1e0 测试:修正 AGC 测试文件的类型错误
- 按 vitest 0.34 的参数元组口径改写 mock 泛型
- 修正 noUncheckedIndexedAccess 下的下标访问
- 补齐与当前类型脱节的测试桩字段
- 按 scripts/*.mjs 的运行时契约补局部类型声明
2026-10-03 17:41:30 +08:00

65 lines
2.5 KiB
TypeScript

/** @vitest-environment jsdom */
import { cleanup, render } from '@testing-library/react';
import React from 'react';
import { afterEach, expect, it } from 'vitest';
import { DirectProjectTurn } from '../src/view/project-development/chat/components/DirectProjectConversation/DirectProjectTurn';
import type {
DirectChatTurn,
DirectChatTurnState,
} from '../src/view/project-development/chat/conversation/directTurnPresentation';
afterEach(() => cleanup());
const SENT_AT = 1_800_000_000_000;
const ENDED_AT = SENT_AT + 12_400;
const turn = (
state: DirectChatTurnState,
overrides: Partial<DirectChatTurn> = {},
): DirectChatTurn => ({
key: 'direct-codex:turn-1:user',
users: [{ kind: 'user', key: 'u', text: '帮我做一个跳跃动作', at: SENT_AT }],
process: [
{ kind: 'reasoning', key: 'r', text: '先看目录' },
// assistant 块按真实类型需要 `at`(只有用户气泡会读它,这里给回合开始时间)。
{ kind: 'assistant', key: 'a', text: '正在写', at: SENT_AT },
],
finals: [{ kind: 'assistant', key: 'a-final', text: '改好了', at: ENDED_AT }],
state,
startedAt: SENT_AT,
endedAt: state === 'finished' ? ENDED_AT : 0,
...overrides,
});
it('running:宿主已认领、回合还没结束时不显示终态文案,也不折叠过程', () => {
const view = render(
React.createElement(DirectProjectTurn, { turn: turn('running') }),
);
expect(view.queryByTestId('turn-usage')).toBeNull();
expect(view.queryByText(/本轮结束于/)).toBeNull();
// 否定式判据:未结束的回合把过程平铺出来,不折进「执行过程」。
expect(view.queryByTestId('turn-process')).toBeNull();
expect(view.getByLabelText('思考过程')).not.toBeNull();
});
it('finished 但没有回合边界(重进项目读回来的历史回合):整条终态文案隐藏', () => {
const view = render(
React.createElement(DirectProjectTurn, {
turn: turn('finished', { startedAt: 0, endedAt: 0 }),
}),
);
expect(view.queryByTestId('turn-usage')).toBeNull();
expect(view.queryByText(/本轮结束于/)).toBeNull();
});
it('finished 且有明确终态:显示结束时间与耗时,过程折叠', () => {
const view = render(
React.createElement(DirectProjectTurn, { turn: turn('finished') }),
);
const usage = view.getByTestId('turn-usage');
expect(usage.textContent).toContain('本轮结束于');
expect(usage.textContent).toContain('耗时 12.4秒');
expect(view.queryByTestId('turn-process')).not.toBeNull();
});