Skip to content

Commit 05c45cd

Browse files
fix(e2e): stop console error collection before disconnect/destroy phase
WebTransport teardown emits benign 'The session is closed' errors during disconnect. Assert and stop the collector before the disconnect/destroy phase so shutdown noise does not cause false failures. Signed-off-by: StreamKit Devin <devin@streamkit.dev> Co-Authored-By: Claudio Costa <devin@streamkit.dev>
1 parent ae6a061 commit 05c45cd

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

e2e/tests/stream.spec.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ test.describe('Stream View - Dynamic Pipeline', () => {
5252
const sessionIdText = await page.getByText(/Session ID:/).textContent();
5353
sessionId = sessionIdText?.replace(/Session ID:\s*/, '').trim() ?? null;
5454

55+
const unexpected = collector.getUnexpected(MOQ_BENIGN_PATTERNS);
56+
expect(unexpected, `Unexpected console errors: ${unexpected.join('; ')}`).toHaveLength(0);
57+
collector.stop();
58+
5559
const destroyButton = page.getByRole('button', {
5660
name: /Destroy Session/i,
5761
});
@@ -64,9 +68,6 @@ test.describe('Stream View - Dynamic Pipeline', () => {
6468

6569
await expect(createButton).toBeVisible({ timeout: 15_000 });
6670
sessionId = null;
67-
68-
const unexpected = collector.getUnexpected(MOQ_BENIGN_PATTERNS);
69-
expect(unexpected, `Unexpected console errors: ${unexpected.join('; ')}`).toHaveLength(0);
7071
});
7172

7273
test('connects via MoQ, verifies connection status, then disconnects', async ({
@@ -136,6 +137,10 @@ test.describe('Stream View - Dynamic Pipeline', () => {
136137
).toBeGreaterThan(0);
137138
expect(audioState.maxCurrentTime, 'AudioContext should have advanced').toBeGreaterThan(0);
138139

140+
const unexpected = collector.getUnexpected(MOQ_BENIGN_PATTERNS);
141+
expect(unexpected, `Unexpected console errors: ${unexpected.join('; ')}`).toHaveLength(0);
142+
collector.stop();
143+
139144
const disconnectButton = page.getByRole('button', { name: /^Disconnect$/i }).first();
140145
await expect(disconnectButton).toBeVisible();
141146
await disconnectButton.click();
@@ -160,9 +165,6 @@ test.describe('Stream View - Dynamic Pipeline', () => {
160165
});
161166

162167
sessionId = null;
163-
164-
const unexpected = collector.getUnexpected(MOQ_BENIGN_PATTERNS);
165-
expect(unexpected, `Unexpected console errors: ${unexpected.join('; ')}`).toHaveLength(0);
166168
});
167169

168170
test.afterEach(async ({ baseURL }) => {

e2e/tests/test-helpers.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,26 @@ export const MOQ_BENIGN_PATTERNS = [
1515
export interface ConsoleErrorCollector {
1616
readonly errors: string[];
1717
reset(): void;
18+
stop(): void;
1819
getUnexpected(extraBenignPatterns?: string[]): string[];
1920
}
2021

2122
export function createConsoleErrorCollector(page: Page): ConsoleErrorCollector {
2223
const errors: string[] = [];
23-
page.on('console', (msg) => {
24+
const handler = (msg: import('@playwright/test').ConsoleMessage) => {
2425
if (msg.type() === 'error') {
2526
errors.push(msg.text());
2627
}
27-
});
28+
};
29+
page.on('console', handler);
2830
return {
2931
errors,
3032
reset() {
3133
errors.length = 0;
3234
},
35+
stop() {
36+
page.removeListener('console', handler);
37+
},
3338
getUnexpected(extraBenignPatterns: string[] = []) {
3439
const allPatterns = [...ALWAYS_BENIGN, ...extraBenignPatterns];
3540
return errors.filter((msg) => !allPatterns.some((p) => msg.includes(p)));

0 commit comments

Comments
 (0)