修复M1D前端文案回归断言
Project CI / Repository checks (pull_request) Successful in 1m24s
Project CI / Frontend tests (pull_request) Successful in 2m55s
Project CI / Backend tests (pull_request) Successful in 3m58s
Project CI / Native shell tests (pull_request) Successful in 14m43s

同步立项入口与设计实现组展示文案的测试期望

恢复Frontend tests与Native shell tests中的前端测试覆盖
This commit is contained in:
2026-08-18 09:35:28 +00:00
parent 4624fd7953
commit c6a08ef98f
8 changed files with 19 additions and 29 deletions
@@ -251,7 +251,7 @@ describe('AI 游戏创作 Agent loop 摘要', () => {
'active 任务:程序组 / Director 拆解程序实现(code-director), 程序组 / Review 执行质量评审(quality-review), 运营组 / Publish 整理发布包装(publish-package)', 'active 任务:程序组 / Director 拆解程序实现(code-director), 程序组 / Review 执行质量评审(quality-review), 运营组 / Publish 整理发布包装(publish-package)',
); );
expect(summary).toContain( expect(summary).toContain(
'carry-over 任务:策划组 / Director 拆解创作方向(design-director)', 'carry-over 任务:设计实现组 / Director 拆解创作方向(design-director)',
); );
expect(summary).toContain('返工焦点:gameHtml 缺少 canvas'); expect(summary).toContain('返工焦点:gameHtml 缺少 canvas');
expect(summary).toContain( expect(summary).toContain(
@@ -267,7 +267,7 @@ describe('AI 游戏创作 Agent loop 摘要', () => {
expect(summary).toContain('还有 1 个建议命令'); expect(summary).toContain('还有 1 个建议命令');
expect(summary).toContain('编排轮次:'); expect(summary).toContain('编排轮次:');
expect(summary).toContain( expect(summary).toContain(
'pass 2 · repair · active 程序组 / Director 拆解程序实现(code-director), 程序组 / Review 执行质量评审(quality-review), 运营组 / Publish 整理发布包装(publish-package) · carry 策划组 / Director 拆解创作方向(design-director) · waves 程序组 / Director 拆解程序实现(code-director) / 程序组 / Review 执行质量评审(quality-review) / 运营组 / Publish 整理发布包装(publish-package) · repair gameHtml 缺少 canvas · routes code-repair+dependency-impact: 程序组 / Director 拆解程序实现(code-director), 程序组 / Review 执行质量评审(quality-review), 程序组 / Preview 执行静态自检(preview-readiness), 运营组 / Publish 整理发布包装(publish-package)', 'pass 2 · repair · active 程序组 / Director 拆解程序实现(code-director), 程序组 / Review 执行质量评审(quality-review), 运营组 / Publish 整理发布包装(publish-package) · carry 设计实现组 / Director 拆解创作方向(design-director) · waves 程序组 / Director 拆解程序实现(code-director) / 程序组 / Review 执行质量评审(quality-review) / 运营组 / Publish 整理发布包装(publish-package) · repair gameHtml 缺少 canvas · routes code-repair+dependency-impact: 程序组 / Director 拆解程序实现(code-director), 程序组 / Review 执行质量评审(quality-review), 程序组 / Preview 执行静态自检(preview-readiness), 运营组 / Publish 整理发布包装(publish-package)',
); );
expect(summary).not.toContain('pass 1 · initial'); expect(summary).not.toContain('pass 1 · initial');
expect(summary).toContain('还有 1 个较早轮次'); expect(summary).toContain('还有 1 个较早轮次');
@@ -1291,7 +1291,7 @@ export function registerHomeProjectCreationTests() {
await waitFor(() => { await waitFor(() => {
expect(promptInput.textContent).toContain('做一个像素风横版游戏'); expect(promptInput.textContent).toContain('做一个像素风横版游戏');
}); });
const createButton = screen.getByRole('button', { name: '开启创作' }); const createButton = screen.getByRole('button', { name: '进入立项策划' });
fireEvent.click(createButton); fireEvent.click(createButton);
await waitFor(() => { await waitFor(() => {
@@ -1110,9 +1110,9 @@ export function registerProjectAssetTests() {
expect(await screen.findByText(/任务拆分:/)).not.toBeNull(); expect(await screen.findByText(/任务拆分:/)).not.toBeNull();
expect( expect(
screen.getByText(/策划组 \/ Director:拆解创作方向 · 待处理/), screen.getByText(/设计实现组 \/ Director:拆解创作方向 · 待处理/),
).not.toBeNull(); ).not.toBeNull();
expect(screen.getByText(/下一步:策划组 \/ Director/)).not.toBeNull(); expect(screen.getByText(/下一步:设计实现组 \/ Director/)).not.toBeNull();
expect(invoke).toHaveBeenCalledWith('get_local_game_manifest', { expect(invoke).toHaveBeenCalledWith('get_local_game_manifest', {
projectPath: '/tmp/authorized-game', projectPath: '/tmp/authorized-game',
commandId: 'task.list', commandId: 'task.list',
@@ -1191,9 +1191,7 @@ export function registerCanvasAssetTests() {
submitChat('/project /tmp/authorized-game'); submitChat('/project /tmp/authorized-game');
fireEvent.click(screen.getByRole('button', { name: '确认' })); fireEvent.click(screen.getByRole('button', { name: '确认' }));
expect( expect(await screen.findByText('已打开:authorized-game')).not.toBeNull();
await screen.findByText('已打开:authorized-game'),
).not.toBeNull();
submitChat( submitChat(
'/import-canvas-asset assets/hero.png canvas-project-1 object:asset-object-1 character image/png', '/import-canvas-asset assets/hero.png canvas-project-1 object:asset-object-1 character image/png',
@@ -1716,9 +1714,7 @@ export function registerCanvasAssetTests() {
submitChat('/project /tmp/authorized-game'); submitChat('/project /tmp/authorized-game');
fireEvent.click(screen.getByRole('button', { name: '确认' })); fireEvent.click(screen.getByRole('button', { name: '确认' }));
expect( expect(await screen.findByText('已打开:authorized-game')).not.toBeNull();
await screen.findByText('已打开:authorized-game'),
).not.toBeNull();
expect(await screen.findByText(/还没有最近一次 Agent run/)).not.toBeNull(); expect(await screen.findByText(/还没有最近一次 Agent run/)).not.toBeNull();
submitChat( submitChat(
@@ -1820,9 +1816,7 @@ export function registerCanvasAssetTests() {
submitChat('/project /tmp/authorized-game'); submitChat('/project /tmp/authorized-game');
fireEvent.click(screen.getByRole('button', { name: '确认' })); fireEvent.click(screen.getByRole('button', { name: '确认' }));
expect( expect(await screen.findByText('已打开:authorized-game')).not.toBeNull();
await screen.findByText('已打开:authorized-game'),
).not.toBeNull();
submitChat('/canvas bad\u0007canvas'); submitChat('/canvas bad\u0007canvas');
submitChat('/sync-canvas-project bad\u0007canvas'); submitChat('/sync-canvas-project bad\u0007canvas');
@@ -2002,9 +1996,7 @@ export function registerCanvasAssetTests() {
submitChat('/project /tmp/authorized-game'); submitChat('/project /tmp/authorized-game');
fireEvent.click(screen.getByRole('button', { name: '确认' })); fireEvent.click(screen.getByRole('button', { name: '确认' }));
expect( expect(await screen.findByText('已打开:authorized-game')).not.toBeNull();
await screen.findByText('已打开:authorized-game'),
).not.toBeNull();
submitChat('/sync-canvas-project canvas-project-1'); submitChat('/sync-canvas-project canvas-project-1');
fireEvent.click(screen.getByRole('button', { name: '确认' })); fireEvent.click(screen.getByRole('button', { name: '确认' }));
@@ -2089,9 +2081,7 @@ export function registerCanvasAssetTests() {
submitChat('/project /tmp/authorized-game'); submitChat('/project /tmp/authorized-game');
fireEvent.click(screen.getByRole('button', { name: '确认' })); fireEvent.click(screen.getByRole('button', { name: '确认' }));
expect( expect(await screen.findByText('已打开:authorized-game')).not.toBeNull();
await screen.findByText('已打开:authorized-game'),
).not.toBeNull();
submitChat('/generate-art 月光厨房弹幕主角'); submitChat('/generate-art 月光厨房弹幕主角');
expect(await screen.findByText('准备生成首版美术素材。')).not.toBeNull(); expect(await screen.findByText('准备生成首版美术素材。')).not.toBeNull();
@@ -385,10 +385,10 @@ export async function assertPlanningAndStatusShortcutFlow(
'状态:active 0 / carry 0 / ready 1 / 等待依赖 13', '状态:active 0 / carry 0 / ready 1 / 等待依赖 13',
); );
expect(dependencyMessage.textContent).toContain( expect(dependencyMessage.textContent).toContain(
'美术组 / Asset 生成首版美术素材(art-asset-plan) · 等待:美术组 / Director 确定视觉方向与规范图(art-director)策划组 / Gameplay 确定玩法规格与界面原型(design-foundation)', '美术组 / Asset 生成首版美术素材(art-asset-plan) · 等待:美术组 / Director 确定视觉方向与规范图(art-director)设计实现组 / Gameplay 确定玩法规格与界面原型(design-foundation)',
); );
expect(dependencyMessage.textContent).toContain( expect(dependencyMessage.textContent).toContain(
'策划组 / Gameplay 确定玩法规格与界面原型(design-foundation) · 等待:策划组 / Director 拆解创作方向(design-director);美术组 / Director 确定视觉方向与规范图(art-director)', '设计实现组 / Gameplay 确定玩法规格与界面原型(design-foundation) · 等待:设计实现组 / Director 拆解创作方向(design-director);美术组 / Director 确定视觉方向与规范图(art-director)',
); );
expect(dependencyMessage.textContent).toContain( expect(dependencyMessage.textContent).toContain(
'边界:只整理任务依赖;不读取任务文件;不启动 run;不修改项目', '边界:只整理任务依赖;不读取任务文件;不启动 run;不修改项目',
@@ -1439,7 +1439,7 @@ export async function assertPlanningAndStatusShortcutFlow(
'美术组:ready · Asset 生成首版美术素材(art-asset-plan) · 验收:角色、场景、UI 和动画需求已映射到画板或本地资产,且至少一张首版核心素材图已生成并登记', '美术组:ready · Asset 生成首版美术素材(art-asset-plan) · 验收:角色、场景、UI 和动画需求已映射到画板或本地资产,且至少一张首版核心素材图已生成并登记',
); );
expect(planMessage.textContent).toContain( expect(planMessage.textContent).toContain(
'空档组:策划组、程序组、数值组、音乐组、运营组', '空档组:设计实现组、程序组、数值组、音乐组、运营组',
); );
expect(planMessage.textContent).toContain( expect(planMessage.textContent).toContain(
'边界:只整理下一轮分工;不读取任务文件;不启动 run;不修改项目', '边界:只整理下一轮分工;不读取任务文件;不启动 run;不修改项目',
@@ -591,7 +591,7 @@ export async function assertProjectAndDesignShortcutFlow(
'原型入口:game/index.html · 未见 trace 产物', '原型入口:game/index.html · 未见 trace 产物',
); );
expect(controlMessage.textContent).toContain( expect(controlMessage.textContent).toContain(
'design-foundation策划组 / Gameplay 确定玩法规格与界面原型 · 待处理', 'design-foundation设计实现组 / Gameplay 确定玩法规格与界面原型 · 待处理',
); );
expect(controlMessage.textContent).toContain( expect(controlMessage.textContent).toContain(
'code-prototype:程序组 / Code 生成可运行原型 · 待处理', 'code-prototype:程序组 / Code 生成可运行原型 · 待处理',
@@ -1146,7 +1146,7 @@ export async function assertProjectAndDesignShortcutFlow(
'当前证据:最近 run 已通过 run-main-shortcut-trace;预览 未启动;发布说明 已生成', '当前证据:最近 run 已通过 run-main-shortcut-trace;预览 未启动;发布说明 已生成',
); );
expect(localizationMessage.textContent).toContain( expect(localizationMessage.textContent).toContain(
'design-foundation策划组 / Gameplay 确定玩法规格与界面原型 · 待处理', 'design-foundation设计实现组 / Gameplay 确定玩法规格与界面原型 · 待处理',
); );
expect(localizationMessage.textContent).toContain( expect(localizationMessage.textContent).toContain(
'code-prototype:程序组 / Code 生成可运行原型 · 待处理', 'code-prototype:程序组 / Code 生成可运行原型 · 待处理',
@@ -561,7 +561,7 @@ export async function assertProjectToolsAndPreviewFlow(
fireEvent.click(screen.getByRole('button', { name: '任务' })); fireEvent.click(screen.getByRole('button', { name: '任务' }));
expect(await screen.findByText(/任务拆分:/)).not.toBeNull(); expect(await screen.findByText(/任务拆分:/)).not.toBeNull();
expect(screen.getByText(/下一步:策划组 \/ Director/)).not.toBeNull(); expect(screen.getByText(/下一步:设计实现组 \/ Director/)).not.toBeNull();
fireEvent.click(screen.getByRole('button', { name: 'Trace' })); fireEvent.click(screen.getByRole('button', { name: 'Trace' }));
expect( expect(
@@ -137,7 +137,7 @@ export function registerProjectRunStatusTests() {
'active: 程序组 / Code 生成可运行原型(code-prototype)', 'active: 程序组 / Code 生成可运行原型(code-prototype)',
); );
expect(screen.getByLabelText('Agent task graph').textContent).toContain( expect(screen.getByLabelText('Agent task graph').textContent).toContain(
'carry-over: 策划组 / Director 拆解创作方向(design-director)', 'carry-over: 设计实现组 / Director 拆解创作方向(design-director)',
); );
expect(screen.getByLabelText('Agent task graph').textContent).toContain( expect(screen.getByLabelText('Agent task graph').textContent).toContain(
'ready: 程序组 / Playtest 预览并试玩验收(preview-playtest)', 'ready: 程序组 / Playtest 预览并试玩验收(preview-playtest)',
@@ -146,7 +146,7 @@ export function registerProjectRunStatusTests() {
'route: 程序组 / Code 生成可运行原型(code-prototype), 程序组 / Review 执行质量评审(quality-review) · code-runtime', 'route: 程序组 / Code 生成可运行原型(code-prototype), 程序组 / Review 执行质量评审(quality-review) · code-runtime',
); );
expect(screen.getByLabelText('Agent pass plans').textContent).toContain( expect(screen.getByLabelText('Agent pass plans').textContent).toContain(
'pass 1: repair · active 程序组 / Code 生成可运行原型(code-prototype), 程序组 / Review 执行质量评审(quality-review) · carry 策划组 / Director 拆解创作方向(design-director) · waves 程序组 / Code 生成可运行原型(code-prototype) / 程序组 / Review 执行质量评审(quality-review) · repair 缺少输入监听 · routes code-runtime: 程序组 / Code 生成可运行原型(code-prototype), 程序组 / Review 执行质量评审(quality-review)', 'pass 1: repair · active 程序组 / Code 生成可运行原型(code-prototype), 程序组 / Review 执行质量评审(quality-review) · carry 设计实现组 / Director 拆解创作方向(design-director) · waves 程序组 / Code 生成可运行原型(code-prototype) / 程序组 / Review 执行质量评审(quality-review) · repair 缺少输入监听 · routes code-runtime: 程序组 / Code 生成可运行原型(code-prototype), 程序组 / Review 执行质量评审(quality-review)',
); );
expect(screen.getByLabelText('Agent artifacts').textContent).toContain( expect(screen.getByLabelText('Agent artifacts').textContent).toContain(
'exports/artifact-8.json', 'exports/artifact-8.json',
@@ -1833,7 +1833,7 @@ export function registerSupervisorRuntimeTests() {
/active 任务:程序组 \/ Director 拆解程序实现\(code-director\), 程序组 \/ Code 生成可运行原型\(code-prototype\), 程序组 \/ Review 执行质量评审\(quality-review\), 程序组 \/ Preview 执行静态自检\(preview-readiness\)/, /active 任务:程序组 \/ Director 拆解程序实现\(code-director\), 程序组 \/ Code 生成可运行原型\(code-prototype\), 程序组 \/ Review 执行质量评审\(quality-review\), 程序组 \/ Preview 执行静态自检\(preview-readiness\)/,
), ),
).not.toBeNull(); ).not.toBeNull();
expect(screen.getByText(/carry-over 任务:策划组/)).not.toBeNull(); expect(screen.getByText(/carry-over 任务:设计实现组/)).not.toBeNull();
expect(screen.getByText(/返工焦点:缺少输入监听/)).not.toBeNull(); expect(screen.getByText(/返工焦点:缺少输入监听/)).not.toBeNull();
expect( expect(
screen.getByText(/agent\.tool\.suggest\.canvas\.project_sync/), screen.getByText(/agent\.tool\.suggest\.canvas\.project_sync/),