fix(前端测试): 修复 npm test 卡死——定时器泄漏 + 去套娃 + 强制退出/超时

- 根因:polling-backoff-recovery 测试断言失败后跳过 loop.dispose(),残留自续期定时器导致 node --test 子进程永不退出
- dead-code-cleanup:移除套娃用例 test_full_vitest_green(再跑一遍全量套件,放大问题),execSync 加 300s 超时;其余静态断言保留
- package.json:node --test --test-force-exit --test-timeout=180000
- CI workflow 前端测试步骤改为 npm test(与 package.json 单一来源)
- 修正 3 处过时期望值(轮询退避/品牌 files+taskType/巡店 delete_conditions)
- 验证:本地 666 用例全过,19-24s,无残留进程
This commit is contained in:
2026-09-13 10:51:19 +08:00
parent b7d4d325e0
commit c81ebb7053
7 changed files with 21 additions and 40 deletions
@@ -132,7 +132,7 @@ test('test_interval_returns_to_base', async () => {
}, sink)
await tick(10)
assert.equal(h.attempts.length, 1, '首轮失败')
assert.equal(sink.at(-1)?.ms, TASK_POLL_VISIBLE_INTERVAL_MS, '失败后仍按正常间隔续轮')
assert.equal(sink.at(-1)?.ms, getTaskPollBackoffMs(1), '失败后按退避间隔续轮(后端故障时不再高频撞库)')
fail = false
// 手动触发下一轮自动轮询(模拟定时器到点;先清掉真实定时器避免僵尸 timer)
const last = sink.at(-1) as SinkEntry
@@ -140,7 +140,7 @@ test('test_interval_returns_to_base', async () => {
last.fn()
await tick(10)
assert.equal(sink.at(-1)?.ms, TASK_POLL_VISIBLE_INTERVAL_MS, '成功后回到正常间隔')
assert.equal(sink.some((e) => e.ms < 1000), false, '自动轮询阶段无退避定时器残留')
assert.equal(sink.some((e) => e.ms === getTaskPollBackoffMs(0)), false, '自动轮询阶段无 in-flight 重试定时器残留')
h.loop.dispose()
})