fix(frontend): 修复已结束运行打不开日志的问题
StrictMode 的 effect 清理会取消挂载时排队的 rAF,但没有把句柄归零;已结束的 run 在挂载时就处于 complete 状态,后续 ingest 看到「还有帧在排队」便不再安排渲染,日志一直停在「等待日志输出...」。取消后把 frameRef 归零,并在 e2e 增加「运行结束后重新打开日志」的回放断言。
This commit is contained in:
@@ -142,6 +142,13 @@ test('manages a task and reads a real run log', async ({ page, request }) => {
|
||||
})
|
||||
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()
|
||||
const editor = page.getByRole('dialog', {
|
||||
name: '编辑任务 [e2e_echo]',
|
||||
|
||||
@@ -409,6 +409,10 @@ function RunLogOutput({
|
||||
return () => {
|
||||
if (frameRef.current) {
|
||||
cancelAnimationFrame(frameRef.current)
|
||||
// StrictMode 会「挂载 → 清理 → 再挂载」,取消后必须把句柄归零,
|
||||
// 否则下一次 scheduleRender 会误以为还有帧在排队而不再安排渲染,
|
||||
// 已结束的 run(complete 在首帧就为 true)会一直停在「等待日志输出」。
|
||||
frameRef.current = 0
|
||||
}
|
||||
}
|
||||
}, [])
|
||||
|
||||
Reference in New Issue
Block a user