File tree Expand file tree Collapse file tree 2 files changed +63
-0
lines changed Expand file tree Collapse file tree 2 files changed +63
-0
lines changed Original file line number Diff line number Diff line change @@ -631,6 +631,42 @@ describe('`Iterate` component', () => {
631631 expect ( channelReturnSpy ) . toHaveBeenCalledOnce ( ) ;
632632 }
633633 } ) ;
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+ ) ;
634670} ) ;
635671
636672const simulatedError = new Error ( '🚨 Simulated Error 🚨' ) ;
Original file line number Diff line number Diff line change @@ -444,6 +444,33 @@ describe('`useAsyncIter` hook', () => {
444444 expect ( channelReturnSpy ) . toHaveBeenCalledOnce ( ) ;
445445 }
446446 } ) ;
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+ ) ;
447474} ) ;
448475
449476const simulatedError = new Error ( '🚨 Simulated Error 🚨' ) ;
You can’t perform that action at this time.
0 commit comments