Skip to content

Commit 5a442dc

Browse files
committed
fix(e2e): make mock api reachable via localhost on CI
1 parent 14abf39 commit 5a442dc

1 file changed

Lines changed: 24 additions & 6 deletions

File tree

frontend/scripts/dnd-reorder-regression.mjs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import puppeteer from 'puppeteer-core'
99
const API_PORT = Number(process.env.E2E_API_PORT || 30000)
1010
const FRONTEND_PORT = Number(process.env.E2E_FRONTEND_PORT || 5173)
1111
const FRONTEND_URL = `http://127.0.0.1:${FRONTEND_PORT}`
12-
const API_BASE_URL = `http://127.0.0.1:${API_PORT}`
1312

1413
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms))
1514

@@ -162,13 +161,30 @@ const createMockApiServer = () => {
162161
return { server, getState }
163162
}
164163

165-
const startMockApi = async () => {
166-
const { server, getState } = createMockApiServer()
167-
await new Promise((resolve, reject) => {
164+
const tryListen = (server, options) =>
165+
new Promise((resolve, reject) => {
168166
server.once('error', reject)
169-
server.listen(API_PORT, '127.0.0.1', resolve)
167+
server.listen(options, resolve)
170168
})
171-
return { server, getState }
169+
170+
const startMockApi = async () => {
171+
// Prefer binding to IPv6 unspecified (dual-stack) so Vite's `localhost` proxy
172+
// (which may resolve to ::1 on CI) can reach the mock server.
173+
const primary = createMockApiServer()
174+
try {
175+
await tryListen(primary.server, { port: API_PORT, host: '::', ipv6Only: false })
176+
return primary
177+
} catch {
178+
try {
179+
primary.server.close()
180+
} catch {
181+
// ignore
182+
}
183+
}
184+
185+
const fallback = createMockApiServer()
186+
await tryListen(fallback.server, { port: API_PORT, host: '127.0.0.1' })
187+
return fallback
172188
}
173189

174190
const waitForHttpReady = async (url, timeoutMs) => {
@@ -240,6 +256,8 @@ const run = async () => {
240256
const scriptsDir = path.dirname(scriptFile)
241257
const frontendRoot = path.resolve(scriptsDir, '..')
242258
const mockApi = await startMockApi()
259+
// Ensure `localhost` can reach the mock API (CI runners often resolve localhost -> ::1).
260+
await waitForHttpReady(`http://localhost:${API_PORT}/api/version`, 10000)
243261
const vite = startVite(frontendRoot)
244262
let browser
245263

0 commit comments

Comments
 (0)