@@ -103,23 +103,32 @@ describe('ReactExpiration', () => {
103103 return { type : 'span' , children : [ ] , prop, hidden : false } ;
104104 }
105105
106+ function flushNextRenderIfExpired ( ) {
107+ // This will start rendering the next level of work. If the work hasn't
108+ // expired yet, React will exit without doing anything. If it has expired,
109+ // it will schedule a sync task.
110+ Scheduler . unstable_flushExpired ( ) ;
111+ // Flush the sync task.
112+ ReactNoop . flushSync ( ) ;
113+ }
114+
106115 it ( 'increases priority of updates as time progresses' , ( ) => {
107116 ReactNoop . render ( < span prop = "done" /> ) ;
108117
109118 expect ( ReactNoop . getChildren ( ) ) . toEqual ( [ ] ) ;
110119
111120 // Nothing has expired yet because time hasn't advanced.
112- ReactNoop . flushExpired ( ) ;
121+ flushNextRenderIfExpired ( ) ;
113122 expect ( ReactNoop . getChildren ( ) ) . toEqual ( [ ] ) ;
114123
115124 // Advance time a bit, but not enough to expire the low pri update.
116125 ReactNoop . expire ( 4500 ) ;
117- ReactNoop . flushExpired ( ) ;
126+ flushNextRenderIfExpired ( ) ;
118127 expect ( ReactNoop . getChildren ( ) ) . toEqual ( [ ] ) ;
119128
120129 // Advance by another second. Now the update should expire and flush.
121- ReactNoop . expire ( 1000 ) ;
122- ReactNoop . flushExpired ( ) ;
130+ ReactNoop . expire ( 500 ) ;
131+ flushNextRenderIfExpired ( ) ;
123132 expect ( ReactNoop . getChildren ( ) ) . toEqual ( [ span ( 'done' ) ] ) ;
124133 } ) ;
125134
@@ -323,7 +332,8 @@ describe('ReactExpiration', () => {
323332
324333 Scheduler . unstable_advanceTime ( 10000 ) ;
325334
326- expect ( Scheduler ) . toFlushExpired ( [ 'D' , 'E' ] ) ;
335+ flushNextRenderIfExpired ( ) ;
336+ expect ( Scheduler ) . toHaveYielded ( [ 'D' , 'E' ] ) ;
327337 expect ( root ) . toMatchRenderedOutput ( 'ABCDE' ) ;
328338 } ) ;
329339
@@ -351,7 +361,8 @@ describe('ReactExpiration', () => {
351361
352362 Scheduler . unstable_advanceTime ( 10000 ) ;
353363
354- expect ( Scheduler ) . toFlushExpired ( [ 'D' , 'E' ] ) ;
364+ flushNextRenderIfExpired ( ) ;
365+ expect ( Scheduler ) . toHaveYielded ( [ 'D' , 'E' ] ) ;
355366 expect ( root ) . toMatchRenderedOutput ( 'ABCDE' ) ;
356367 } ) ;
357368
@@ -373,12 +384,14 @@ describe('ReactExpiration', () => {
373384 ReactNoop . render ( 'Hi' ) ;
374385
375386 // The update should not have expired yet.
376- expect ( Scheduler ) . toFlushExpired ( [ ] ) ;
387+ flushNextRenderIfExpired ( ) ;
388+ expect ( Scheduler ) . toHaveYielded ( [ ] ) ;
377389 expect ( ReactNoop ) . toMatchRenderedOutput ( null ) ;
378390
379391 // Advance the time some more to expire the update.
380392 Scheduler . unstable_advanceTime ( 10000 ) ;
381- expect ( Scheduler ) . toFlushExpired ( [ ] ) ;
393+ flushNextRenderIfExpired ( ) ;
394+ expect ( Scheduler ) . toHaveYielded ( [ ] ) ;
382395 expect ( ReactNoop ) . toMatchRenderedOutput ( 'Hi' ) ;
383396 } ) ;
384397
@@ -391,15 +404,17 @@ describe('ReactExpiration', () => {
391404 Scheduler . unstable_advanceTime ( 10000 ) ;
392405
393406 ReactNoop . render ( 'Hi' ) ;
394- expect ( Scheduler ) . toFlushExpired ( [ ] ) ;
407+ flushNextRenderIfExpired ( ) ;
408+ expect ( Scheduler ) . toHaveYielded ( [ ] ) ;
395409 expect ( ReactNoop ) . toMatchRenderedOutput ( null ) ;
396410
397411 // Advancing by ~5 seconds should be sufficient to expire the update. (I
398412 // used a slightly larger number to allow for possible rounding.)
399413 Scheduler . unstable_advanceTime ( 6000 ) ;
400414
401415 ReactNoop . render ( 'Hi' ) ;
402- expect ( Scheduler ) . toFlushExpired ( [ ] ) ;
416+ flushNextRenderIfExpired ( ) ;
417+ expect ( Scheduler ) . toHaveYielded ( [ ] ) ;
403418 expect ( ReactNoop ) . toMatchRenderedOutput ( 'Hi' ) ;
404419 } ) ;
405420
0 commit comments