From a75dc94f20b15bc5170ba09090543d238f6b4058 Mon Sep 17 00:00:00 2001 From: kdletters Date: Wed, 2 Sep 2026 11:36:00 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A8=B3=E5=AE=9A=20GDD=20=E5=AE=A1=E6=89=B9?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E6=A0=87=E8=AF=86=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 等待审批提交按钮恢复可用后再触发重试 消除慢环境下 React 状态更新未完成导致的偶发红灯 --- .../tests/appSurface/plan-gdd.suite.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/apps/ai-game-creator-shell/tests/appSurface/plan-gdd.suite.ts b/apps/ai-game-creator-shell/tests/appSurface/plan-gdd.suite.ts index e87da4da5..fe387dd7d 100644 --- a/apps/ai-game-creator-shell/tests/appSurface/plan-gdd.suite.ts +++ b/apps/ai-game-creator-shell/tests/appSurface/plan-gdd.suite.ts @@ -155,6 +155,11 @@ export function registerPlanGddApprovalTests() { const dialog = openReviseDialog(); typeComment(dialog, '把核心循环压到三步'); + await waitFor(() => { + expect( + within(dialog).getByRole('button', { name: '提交决定' }), + ).toHaveProperty('disabled', false); + }); harness.failNextPlanGddDecision('PLAN_DURABILITY_FAILED'); fireEvent.click(screen.getByRole('button', { name: '提交决定' })); await waitFor(() => { @@ -163,6 +168,11 @@ export function registerPlanGddApprovalTests() { // 原样重试:属于方案 §13.2 的 busy/超时/网络重试,必须复用同一 responseId。 harness.failNextPlanGddDecision('PLAN_DURABILITY_FAILED'); + await waitFor(() => { + expect( + within(dialog).getByRole('button', { name: '提交决定' }), + ).toHaveProperty('disabled', false); + }); fireEvent.click(screen.getByRole('button', { name: '提交决定' })); await waitFor(() => { expect(harness.planGddDecisionCalls).toHaveLength(2); @@ -175,6 +185,11 @@ export function registerPlanGddApprovalTests() { // 「同 responseId 的审批意图不一致」硬拒,用户改写后的原因永远落不了盘。 typeComment(dialog, '把核心循环压到两步,并去掉天气系统'); harness.failNextPlanGddDecision('PLAN_DURABILITY_FAILED'); + await waitFor(() => { + expect( + within(dialog).getByRole('button', { name: '提交决定' }), + ).toHaveProperty('disabled', false); + }); fireEvent.click(screen.getByRole('button', { name: '提交决定' })); await waitFor(() => { expect(harness.planGddDecisionCalls).toHaveLength(3);