@@ -10,6 +10,34 @@ async function sleep(ms: number): Promise<void> {
1010 return new Promise ( ( resolve ) => setTimeout ( resolve , ms ) ) ;
1111}
1212
13+ async function waitFor ( fn : ( ) => void ) {
14+ return new Promise < void > ( ( resolve , reject ) => {
15+ let error : unknown = null ;
16+ function runFn ( ) {
17+ try {
18+ fn ( ) ;
19+ clearInterval ( intervalTimer ) ;
20+ clearTimeout ( timeoutTimer ) ;
21+ resolve ( ) ;
22+ } catch ( e ) {
23+ error = e ;
24+ }
25+ }
26+ const intervalTimer = setInterval ( ( ) => {
27+ runFn ( ) ;
28+ } , 50 ) ;
29+ const timeoutTimer = setTimeout ( ( ) => {
30+ clearInterval ( intervalTimer ) ;
31+ if ( error ) {
32+ reject ( new Error ( 'Timeout waiting for condition' , { cause : error } ) ) ;
33+ } else {
34+ reject ( new Error ( 'unreachable' ) ) ;
35+ }
36+ } , 1000 ) ;
37+ runFn ( ) ; // First, execute immediately
38+ } ) ;
39+ }
40+
1341describe ( 'runCMKInWatchMode' , ( ) => {
1442 test ( 'reports system error occurs during watching' , async ( ) => {
1543 const fixturePath = join ( process . cwd ( ) , 'fixtures' ) ;
@@ -43,7 +71,9 @@ describe('runCMKInWatchMode', () => {
4371
4472 console . log ( 'update file' ) ;
4573 await writeFile ( textFilePath , '1' ) ;
46- await vi . waitFor ( ( ) => {
74+ const startTime = Date . now ( ) ;
75+ await waitFor ( ( ) => {
76+ console . log ( 'elapsed' , Date . now ( ) - startTime , globalThis . changeCount ) ;
4777 assert ( globalThis . changeCount === 1 , `Expected changeCount to be 1, but got ${ globalThis . changeCount } ` ) ;
4878 } ) ;
4979
0 commit comments