@@ -9,7 +9,6 @@ import puppeteer from 'puppeteer-core'
99const API_PORT = Number ( process . env . E2E_API_PORT || 30000 )
1010const FRONTEND_PORT = Number ( process . env . E2E_FRONTEND_PORT || 5173 )
1111const FRONTEND_URL = `http://127.0.0.1:${ FRONTEND_PORT } `
12- const API_BASE_URL = `http://127.0.0.1:${ API_PORT } `
1312
1413const 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
174190const 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