11import  {  test ,  expect  }  from  '@playwright/test' 
22import  {  setupInlineFixture ,  type  Fixture ,  useFixture  }  from  './fixture' 
3- import  {  waitForHydration  }  from  './helper' 
3+ import  {  waitForHydration ,   expectNoReload  }  from  './helper' 
44
55test . describe ( ( )  =>  { 
66  const  root  =  'examples/e2e/temp/syntax-error' 
@@ -33,17 +33,16 @@ test.describe(() => {
3333          import { useState } from 'react' 
3434
3535          export function TestSyntaxErrorClient() { 
36-             const [triggerError, setTriggerError ] = useState(false ) 
36+             const [count, setCount ] = useState(0 ) 
3737             
3838            return ( 
3939              <div data-testid="client-syntax-ready"> 
4040                <button  
41-                   onClick={() => setTriggerError(true )} 
42-                   data-testid="trigger- client-syntax-error " 
41+                   onClick={() => setCount(count + 1 )} 
42+                   data-testid="client-counter " 
4343                > 
44-                   Trigger  Client Syntax Error  
44+                   Client Count: {count}  
4545                </button> 
46-                 {triggerError && <div>Client ready for syntax error</div>} 
4746              </div> 
4847            ) 
4948          } 
@@ -61,132 +60,124 @@ test.describe(() => {
6160    } ) 
6261  } ) 
6362
64-   function  defineSyntaxErrorTests ( f : Fixture )  { 
65-     test ( 'client syntax error triggers error overlay' ,  async  ( {  page } )  =>  { 
66-       await  page . goto ( f . url ( ) ) 
67-       await  waitForHydration ( page ) 
63+   test . describe ( 'dev' ,  ( )  =>  { 
64+     const  f  =  useFixture ( {  root,  mode : 'dev'  } ) 
65+     defineSyntaxErrorTests ( f ) 
66+   } ) 
67+ } ) 
6868
69-       await  expect ( page . getByTestId ( 'client-syntax-ready' ) ) . toBeVisible ( ) 
69+ function  defineSyntaxErrorTests ( f : Fixture )  { 
70+   test ( 'client syntax error triggers error overlay' ,  async  ( {  page } )  =>  { 
71+     await  page . goto ( f . url ( ) ) 
72+     await  waitForHydration ( page ) 
7073
71-       // Edit client file to introduce syntax error 
72-       const  editor  =  f . createEditor ( 'src/client.tsx' ) 
73-       editor . edit ( ( s )  => 
74-         s . replace ( 
75-           'export function TestSyntaxErrorClient() {' , 
76-           'export function TestSyntaxErrorClient() { const invalid = ;' , 
77-         ) , 
78-       ) 
79- 
80-       // Should see error overlay 
81-       await  expect ( page . locator ( 'vite-error-overlay' ) ) . toBeVisible ( { 
82-         timeout : 5000 , 
83-       } ) 
84- 
85-       // Fix syntax error 
86-       editor . reset ( ) 
87- 
88-       // Error overlay should disappear and page should work 
89-       await  expect ( page . locator ( 'vite-error-overlay' ) ) . not . toBeVisible ( { 
90-         timeout : 5000 , 
91-       } ) 
92-       await  expect ( page . getByTestId ( 'client-syntax-ready' ) ) . toBeVisible ( ) 
93-     } ) 
94- 
95-     test ( 'server syntax error triggers error overlay' ,  async  ( {  page } )  =>  { 
96-       await  page . goto ( f . url ( ) ) 
97-       await  waitForHydration ( page ) 
74+     await  expect ( page . getByTestId ( 'client-syntax-ready' ) ) . toBeVisible ( ) 
9875
99-       await  expect ( page . getByTestId ( 'server-syntax-ready' ) ) . toBeVisible ( ) 
76+     // Edit client file to introduce syntax error 
77+     const  editor  =  f . createEditor ( 'src/client.tsx' ) 
78+     editor . edit ( ( s )  => 
79+       s . replace ( 
80+         'export function TestSyntaxErrorClient() {' , 
81+         'export function TestSyntaxErrorClient() { const invalid = ;' , 
82+       ) , 
83+     ) 
10084
101-       // Edit server file to introduce syntax error 
102-       const  editor  =  f . createEditor ( 'src/server.tsx' ) 
103-       editor . edit ( ( s )  => 
104-         s . replace ( 
105-           'export function TestSyntaxErrorServer() {' , 
106-           'export function TestSyntaxErrorServer() { const invalid = ;' , 
107-         ) , 
108-       ) 
109- 
110-       // Should see error overlay 
111-       await  expect ( page . locator ( 'vite-error-overlay' ) ) . toBeVisible ( { 
112-         timeout : 5000 , 
113-       } ) 
114- 
115-       // Fix syntax error 
116-       editor . reset ( ) 
117- 
118-       // Error overlay should disappear and server HMR should work 
119-       await  expect ( page . locator ( 'vite-error-overlay' ) ) . not . toBeVisible ( { 
120-         timeout : 10000 , 
121-       } ) 
122-       await  expect ( page . getByTestId ( 'server-syntax-ready' ) ) . toBeVisible ( ) 
123-     } ) 
85+     // Should see error overlay 
86+     await  expect ( page . locator ( 'vite-error-overlay' ) ) . toBeVisible ( ) 
12487
125-     test ( 'initial SSR with server component syntax error shows error page' ,  async  ( { 
126-       page, 
127-     } )  =>  { 
128-       // Edit server file to introduce syntax error before navigation 
129-       const  editor  =  f . createEditor ( 'src/server.tsx' ) 
130-       editor . edit ( ( s )  => 
131-         s . replace ( 
132-           'export function TestSyntaxErrorServer() {' , 
133-           'export function TestSyntaxErrorServer() { const invalid = ;' , 
134-         ) , 
135-       ) 
136- 
137-       // Navigate to page with syntax error 
138-       await  page . goto ( f . url ( ) ) 
88+     // Fix syntax error 
89+     editor . reset ( ) 
13990
140-        // Should see error content (check for the actual error text visible in the output)  
141-        await  expect ( page . locator ( 'body ' ) ) . toContainText ( 
142-          'Transform failed with 1 error' , 
143-        ) 
91+     // Error overlay should disappear and page should work  
92+     await  expect ( page . locator ( 'vite-error-overlay ' ) ) . not . toBeVisible ( ) 
93+     await   expect ( page . getByTestId ( 'client-syntax-ready' ) ) . toBeVisible ( ) 
94+   } ) 
14495
145-       // Fix syntax error 
146-       editor . reset ( ) 
96+   test ( 'server syntax error triggers error overlay' ,  async  ( {  page } )  =>  { 
97+     await  page . goto ( f . url ( ) ) 
98+     await  waitForHydration ( page ) 
14799
148-       // Wait a bit for file system changes to be detected 
149-       await  page . waitForTimeout ( 100 ) 
100+     await  expect ( page . getByTestId ( 'server-syntax-ready' ) ) . toBeVisible ( ) 
150101
151-       // Should work normally now 
152-       await  page . goto ( f . url ( ) ) 
153-       await  waitForHydration ( page ) 
154-       await  expect ( page . getByTestId ( 'server-syntax-ready' ) ) . toBeVisible ( ) 
155-     } ) 
102+     // Edit server file to introduce syntax error 
103+     const  editor  =  f . createEditor ( 'src/server.tsx' ) 
104+     editor . edit ( ( s )  => 
105+       s . replace ( 
106+         'export function TestSyntaxErrorServer() {' , 
107+         'export function TestSyntaxErrorServer() { const invalid = ;' , 
108+       ) , 
109+     ) 
156110
157-     test ( 'initial SSR with client component syntax error shows error page' ,  async  ( { 
158-       page, 
159-     } )  =>  { 
160-       // Edit client file to introduce syntax error before navigation 
161-       const  editor  =  f . createEditor ( 'src/client.tsx' ) 
162-       editor . edit ( ( s )  => 
163-         s . replace ( 
164-           'export function TestSyntaxErrorClient() {' , 
165-           'export function TestSyntaxErrorClient() { const invalid = ;' , 
166-         ) , 
167-       ) 
168- 
169-       // Navigate to page with syntax error 
170-       await  page . goto ( f . url ( ) ) 
111+     // Should see error overlay 
112+     await  expect ( page . locator ( 'vite-error-overlay' ) ) . toBeVisible ( ) 
171113
172-        // Should see error content (client  syntax errors during SSR)  
173-        await   expect ( page . locator ( 'body' ) ) . toContainText ( 'Unexpected token' ) 
114+     // Fix  syntax error  
115+     editor . reset ( ) 
174116
175-       // Fix syntax error 
176-       editor . reset ( ) 
117+     // Error overlay should disappear and server should work again 
118+     await  expect ( page . locator ( 'vite-error-overlay' ) ) . not . toBeVisible ( ) 
119+     await  expect ( page . getByTestId ( 'server-syntax-ready' ) ) . toBeVisible ( ) 
120+   } ) 
177121
178-       // Wait a bit for file system changes to be detected 
179-       await  page . waitForTimeout ( 100 ) 
122+   test ( 'initial SSR with server component syntax error shows error page' ,  async  ( { 
123+     page, 
124+   } )  =>  { 
125+     // Edit server file to introduce syntax error before navigation 
126+     const  editor  =  f . createEditor ( 'src/server.tsx' ) 
127+     editor . edit ( ( s )  => 
128+       s . replace ( 
129+         'export function TestSyntaxErrorServer() {' , 
130+         'export function TestSyntaxErrorServer() { const invalid = ;' , 
131+       ) , 
132+     ) 
133+ 
134+     // Navigate to page with syntax error 
135+     await  page . goto ( f . url ( ) ) 
136+ 
137+     // Should see error content 
138+     await  expect ( page . locator ( 'body' ) ) . toContainText ( 
139+       'Transform failed with 1 error' , 
140+     ) 
141+ 
142+     // Fix syntax error 
143+     editor . reset ( ) 
144+ 
145+     // Should work normally now 
146+     await  expect ( async  ( )  =>  { 
147+       await  page . goto ( f . url ( ) ) 
148+       await  waitForHydration ( page ) 
149+       await  expect ( page . getByTestId ( 'server-syntax-ready' ) ) . toBeVisible ( ) 
150+     } ) . toPass ( {  timeout : 10000  } ) 
151+   } ) 
180152
181-       // Should work normally now 
153+   test ( 'initial SSR with client component syntax error shows error page' ,  async  ( { 
154+     page, 
155+   } )  =>  { 
156+     // Edit client file to introduce syntax error before navigation 
157+     const  editor  =  f . createEditor ( 'src/client.tsx' ) 
158+     editor . edit ( ( s )  => 
159+       s . replace ( 
160+         'export function TestSyntaxErrorClient() {' , 
161+         'export function TestSyntaxErrorClient() { const invalid = ;' , 
162+       ) , 
163+     ) 
164+ 
165+     // Navigate to page with syntax error 
166+     await  page . goto ( f . url ( ) ) 
167+ 
168+     // Should see error content 
169+     await  expect ( page . locator ( 'body' ) ) . toContainText ( 
170+       'Transform failed with 1 error' , 
171+     ) 
172+ 
173+     // Fix syntax error 
174+     editor . reset ( ) 
175+ 
176+     // Should work normally now 
177+     await  expect ( async  ( )  =>  { 
182178      await  page . goto ( f . url ( ) ) 
183179      await  waitForHydration ( page ) 
184180      await  expect ( page . getByTestId ( 'client-syntax-ready' ) ) . toBeVisible ( ) 
185-     } ) 
186-   } 
187- 
188-   test . describe ( 'dev' ,  ( )  =>  { 
189-     const  f  =  useFixture ( {  root,  mode : 'dev'  } ) 
190-     defineSyntaxErrorTests ( f ) 
181+     } ) . toPass ( ) 
191182  } ) 
192- } ) 
183+ } 
0 commit comments