diff --git a/packages/mcp/src/__tests__/manager.test.ts b/packages/mcp/src/__tests__/manager.test.ts index e6454196ba..e1789e0f7d 100644 --- a/packages/mcp/src/__tests__/manager.test.ts +++ b/packages/mcp/src/__tests__/manager.test.ts @@ -749,7 +749,9 @@ describe('McpClientManager E2E', { concurrency: false }, () => { ); }); - test('gives spaced list-changed notifications independent refresh budgets', async () => { + test('gives spaced list-changed notifications independent refresh budgets', { + timeout: 30_000, + }, async () => { const fixture = await createRemoteFixture('sse'); let now = 0; const manager = createManager({ now: () => now }); @@ -757,8 +759,23 @@ describe('McpClientManager E2E', { concurrency: false }, () => { for (let change = 1; change <= 4; change += 1) { now += 1_000; + const refreshCompleted = new Promise((resolve) => { + const unsubscribe = manager.onChange((status) => { + if ( + status.serverId !== 'remote' || + status.state !== 'connected' || + status.updatedAt !== now || + status.error !== undefined + ) { + return; + } + unsubscribe(); + resolve(); + }); + }); await fixture.notifyToolListChanged(); - await waitFor(() => countProtocolMethod(fixture, 'tools/list') === change + 1); + await refreshCompleted; + assert.equal(countProtocolMethod(fixture, 'tools/list'), change + 1); } assert.equal(manager.status('remote')?.error, undefined);