fix(frontend): 修复已结束运行打不开日志的问题

StrictMode 的 effect 清理会取消挂载时排队的 rAF,但没有把句柄归零;已结束的 run 在挂载时就处于 complete 状态,后续 ingest 看到「还有帧在排队」便不再安排渲染,日志一直停在「等待日志输出...」。取消后把 frameRef 归零,并在 e2e 增加「运行结束后重新打开日志」的回放断言。
This commit is contained in:
2026-11-02 23:19:07 +08:00
parent d3f0f57f6d
commit 608872bf06
2 changed files with 11 additions and 0 deletions
+7
View File
@@ -142,6 +142,13 @@ test('manages a task and reads a real run log', async ({ page, request }) => {
}) })
await drawer.getByRole('button', { name: '关闭' }).click() await drawer.getByRole('button', { name: '关闭' }).click()
// 运行已结束时再打开日志,也要能回放(曾因 rAF 句柄未归零停在空态)。
await page.getByRole('button', { name: '日志' }).click()
const replayDrawer = page.getByRole('dialog', { name: 'E2E echo' })
await expect(replayDrawer).toBeVisible()
await expect(replayDrawer.getByText('e2e-output')).toBeVisible()
await replayDrawer.getByRole('button', { name: '关闭' }).click()
await page.getByRole('button', { name: '编辑' }).click() await page.getByRole('button', { name: '编辑' }).click()
const editor = page.getByRole('dialog', { const editor = page.getByRole('dialog', {
name: '编辑任务 [e2e_echo]', name: '编辑任务 [e2e_echo]',
+4
View File
@@ -409,6 +409,10 @@ function RunLogOutput({
return () => { return () => {
if (frameRef.current) { if (frameRef.current) {
cancelAnimationFrame(frameRef.current) cancelAnimationFrame(frameRef.current)
// StrictMode 会「挂载 → 清理 → 再挂载」,取消后必须把句柄归零,
// 否则下一次 scheduleRender 会误以为还有帧在排队而不再安排渲染,
// 已结束的 run(complete 在首帧就为 true)会一直停在「等待日志输出」。
frameRef.current = 0
} }
} }
}, []) }, [])