File tree 2 files changed +63
-0
lines changed
2 files changed +63
-0
lines changed Original file line number Diff line number Diff line change @@ -631,6 +631,42 @@ describe('`Iterate` component', () => {
631
631
expect ( channelReturnSpy ) . toHaveBeenCalledOnce ( ) ;
632
632
}
633
633
} ) ;
634
+
635
+ it (
636
+ gray (
637
+ 'When given a rapid yielding iterable, consecutive values are batched into a single render that takes only the last value'
638
+ ) ,
639
+ async ( ) => {
640
+ const iter = ( async function * ( ) {
641
+ yield * [ 'a' , 'b' , 'c' ] ;
642
+ } ) ( ) ;
643
+ let timesRerendered = 0 ;
644
+ let lastRenderFnInput : undefined | IterationResult < string > ;
645
+
646
+ const rendered = render (
647
+ < Iterate value = { iter } >
648
+ { next => {
649
+ timesRerendered ++ ;
650
+ lastRenderFnInput = next ;
651
+ return < div id = "test-created-elem" > Render count: { timesRerendered } </ div > ;
652
+ } }
653
+ </ Iterate >
654
+ ) ;
655
+
656
+ await act ( ( ) => { } ) ;
657
+
658
+ expect ( lastRenderFnInput ) . toStrictEqual ( {
659
+ value : 'c' ,
660
+ pendingFirst : false ,
661
+ done : true ,
662
+ error : undefined ,
663
+ } ) ;
664
+ expect ( timesRerendered ) . toStrictEqual ( 2 ) ;
665
+ expect ( rendered . container . innerHTML ) . toStrictEqual (
666
+ '<div id="test-created-elem">Render count: 2</div>'
667
+ ) ;
668
+ }
669
+ ) ;
634
670
} ) ;
635
671
636
672
const simulatedError = new Error ( '🚨 Simulated Error 🚨' ) ;
Original file line number Diff line number Diff line change @@ -444,6 +444,33 @@ describe('`useAsyncIter` hook', () => {
444
444
expect ( channelReturnSpy ) . toHaveBeenCalledOnce ( ) ;
445
445
}
446
446
} ) ;
447
+
448
+ it (
449
+ gray (
450
+ 'When given a rapid yielding iterable, consecutive values are batched into a single render that takes only the last value'
451
+ ) ,
452
+ async ( ) => {
453
+ let timesRerendered = 0 ;
454
+ const iter = ( async function * ( ) {
455
+ yield * [ 'a' , 'b' , 'c' ] ;
456
+ } ) ( ) ;
457
+
458
+ const renderedHook = renderHook ( ( ) => {
459
+ timesRerendered ++ ;
460
+ return useAsyncIter ( iter ) ;
461
+ } ) ;
462
+
463
+ await act ( ( ) => { } ) ;
464
+
465
+ expect ( timesRerendered ) . toStrictEqual ( 2 ) ;
466
+ expect ( renderedHook . result . current ) . toStrictEqual ( {
467
+ value : 'c' ,
468
+ pendingFirst : false ,
469
+ done : true ,
470
+ error : undefined ,
471
+ } ) ;
472
+ }
473
+ ) ;
447
474
} ) ;
448
475
449
476
const simulatedError = new Error ( '🚨 Simulated Error 🚨' ) ;
You can’t perform that action at this time.
0 commit comments