fix: prevent response disposal race condition in E2E test

Wrap route.fetch() and response.json() in try/catch blocks to handle
cases where the response is disposed before it can be accessed. Falls
back to route.continue() to let the original request proceed normally.

This fixes the intermittent "Response has been disposed" error in
open-existing-project.spec.ts that occurs due to timing issues in CI.
This commit is contained in:
Stefan de Vogelaere
2026-01-18 15:54:24 +01:00
parent 96202d4bc2
commit eb30ef71f9

View File

@@ -84,18 +84,24 @@ test.describe('Open Project', () => {
// Intercept settings API BEFORE any navigation to prevent restoring a currentProject
// AND inject our test project into the projects list
await page.route('**/api/settings/global', async (route) => {
const response = await route.fetch();
// Immediately consume the body to prevent disposal issues
const bodyPromise = response.body();
const status = response.status();
const headers = response.headers();
const body = await bodyPromise;
let response;
try {
response = await route.fetch();
} catch {
// If fetch fails, continue with original request
await route.continue();
return;
}
let json;
try {
json = JSON.parse(body.toString());
json = await response.json();
} catch {
json = {};
// If response is disposed, continue with original request
await route.continue();
return;
}
if (json.settings) {
// Remove currentProjectId to prevent restoring a project
json.settings.currentProjectId = null;
@@ -115,11 +121,7 @@ test.describe('Open Project', () => {
json.settings.projects = [testProject, ...existingProjects];
}
}
await route.fulfill({
status: status,
headers: headers,
json,
});
await route.fulfill({ response, json });
});
// Now navigate to the app