diff --git a/tests/usage-telemetry-emission.test.mts b/tests/usage-telemetry-emission.test.mts index 9370125f4..11093a750 100644 --- a/tests/usage-telemetry-emission.test.mts +++ b/tests/usage-telemetry-emission.test.mts @@ -31,15 +31,25 @@ interface CapturedEvent { tier: number; } -function makeRecordingCtx(): { ctx: GatewayCtx; settled: Promise } { +function makeRecordingCtx(): { ctx: GatewayCtx; settled: Promise } { const pending: Promise[] = []; const ctx: GatewayCtx = { waitUntil: (p) => { pending.push(p); }, }; + // Quiescence loop: emitUsageEvents calls ctx.waitUntil from inside an + // already-pending waitUntil promise, so the array grows during drain. + // Keep awaiting until no new entries appear between iterations. + async function settled(): Promise { + let prev = -1; + while (pending.length !== prev) { + prev = pending.length; + await Promise.allSettled(pending.slice(0, prev)); + } + } return { ctx, - get settled() { return Promise.all(pending) as Promise; }, - } as { ctx: GatewayCtx; settled: Promise }; + get settled() { return settled(); }, + } as { ctx: GatewayCtx; settled: Promise }; } function installAxiomFetchSpy(