@@ -50,15 +50,91 @@ async function main() {
5050 // Install Playwright browsers
5151 await runCommand ( "npx" , [ "playwright" , "install" ] , { cwd : testDir } ) ;
5252
53- console . log ( "🎭 Running Playwright tests..." ) ;
53+ // Start the test server in the background
54+ console . log ( "🚀 Starting test server..." ) ;
55+ const serverProcess = spawn (
56+ "deno" ,
57+ [ "run" , "--allow-all" , "test/browser/server.ts" ] ,
58+ {
59+ cwd : projectRoot ,
60+ stdio : [ "pipe" , "pipe" , "pipe" ] ,
61+ detached : false ,
62+ } ,
63+ ) ;
64+
65+ // Log server output for debugging
66+ serverProcess . stdout . on ( "data" , ( data ) => {
67+ console . log ( `[Server] ${ data . toString ( ) . trim ( ) } ` ) ;
68+ } ) ;
5469
55- // Run Playwright tests
56- const playwrightArgs = process . argv . slice ( 2 ) ;
57- await runCommand ( "npx" , [ "playwright" , "test" , ...playwrightArgs ] , {
58- cwd : testDir ,
70+ serverProcess . stderr . on ( "data" , ( data ) => {
71+ console . error ( `[Server Error] ${ data . toString ( ) . trim ( ) } ` ) ;
5972 } ) ;
6073
61- console . log ( "✅ All tests completed successfully!" ) ;
74+ // Wait for server to be ready by checking if port 3000 is responding
75+ const waitForServer = async ( ) => {
76+ for ( let i = 0 ; i < 30 ; i ++ ) {
77+ // Wait up to 30 seconds
78+ try {
79+ // Use a simple HTTP check with Node.js http module instead of fetch
80+ const http = await import ( "http" ) ;
81+ const response = await new Promise ( ( resolve , reject ) => {
82+ const req = http . request (
83+ "http://localhost:3000/npm-test" ,
84+ ( res ) => {
85+ resolve ( res ) ;
86+ } ,
87+ ) ;
88+ req . on ( "error" , reject ) ;
89+ req . setTimeout ( 2000 , ( ) => {
90+ req . destroy ( ) ;
91+ reject ( new Error ( "Request timeout" ) ) ;
92+ } ) ;
93+ req . end ( ) ;
94+ } ) ;
95+
96+ if ( response . statusCode === 200 ) {
97+ console . log ( "✅ Test server is ready!" ) ;
98+ return true ;
99+ }
100+ } catch ( _error ) {
101+ // Server not ready yet, continue waiting
102+ }
103+ console . log ( `⏳ Waiting for server... (${ i + 1 } /30)` ) ;
104+ await new Promise ( ( resolve ) => setTimeout ( resolve , 1000 ) ) ;
105+ }
106+ throw new Error ( "Server failed to start within 30 seconds" ) ;
107+ } ;
108+
109+ await waitForServer ( ) ;
110+
111+ console . log ( "🎭 Running Playwright tests..." ) ;
112+
113+ try {
114+ // Run Playwright tests
115+ const playwrightArgs = process . argv . slice ( 2 ) ;
116+ await runCommand ( "npx" , [ "playwright" , "test" , ...playwrightArgs ] , {
117+ cwd : testDir ,
118+ env : {
119+ ...process . env ,
120+ PLAYWRIGHT_PROJECT_ROOT : projectRoot ,
121+ } ,
122+ } ) ;
123+
124+ console . log ( "✅ All tests completed successfully!" ) ;
125+ } finally {
126+ // Clean up server process
127+ if ( serverProcess && ! serverProcess . killed ) {
128+ console . log ( "🛑 Shutting down test server..." ) ;
129+ serverProcess . kill ( "SIGTERM" ) ;
130+ // Give it a moment to shut down gracefully
131+ setTimeout ( ( ) => {
132+ if ( ! serverProcess . killed ) {
133+ serverProcess . kill ( "SIGKILL" ) ;
134+ }
135+ } , 3000 ) ;
136+ }
137+ }
62138 } catch ( error ) {
63139 console . error ( "❌ Test execution failed:" , error . message ) ;
64140 process . exit ( 1 ) ;
0 commit comments