@@ -68,6 +68,38 @@ describe('lazyDefine', () => {
6868 expect ( onDefine3 ) . to . have . callCount ( 1 )
6969 } )
7070
71+ it ( 'coalesces multiple added elements into a single rAF callback' , async ( ) => {
72+ const onDefine = spy ( )
73+ lazyDefine ( 'coalesce-test-element' , onDefine )
74+
75+ const rafSpy = spy ( window , 'requestAnimationFrame' )
76+ const callsBefore = rafSpy . callCount
77+
78+ await fixture ( html `
79+ < div >
80+ < coalesce-test-element > </ coalesce-test-element >
81+ < coalesce-test-element > </ coalesce-test-element >
82+ < coalesce-test-element > </ coalesce-test-element >
83+ < coalesce-test-element > </ coalesce-test-element >
84+ < coalesce-test-element > </ coalesce-test-element >
85+ < coalesce-test-element > </ coalesce-test-element >
86+ < coalesce-test-element > </ coalesce-test-element >
87+ < coalesce-test-element > </ coalesce-test-element >
88+ < coalesce-test-element > </ coalesce-test-element >
89+ < coalesce-test-element > </ coalesce-test-element >
90+ </ div >
91+ ` )
92+
93+ await animationFrame ( )
94+
95+ const rafCallsFromScan = rafSpy . callCount - callsBefore
96+ rafSpy . restore ( )
97+
98+ // Should use at most a few rAF calls, not one per element
99+ expect ( rafCallsFromScan ) . to . be . lessThan ( 5 )
100+ expect ( onDefine ) . to . be . callCount ( 1 )
101+ } )
102+
71103 it ( 'lazy loads elements in shadow roots' , async ( ) => {
72104 const onDefine = spy ( )
73105 lazyDefine ( 'nested-shadow-element' , onDefine )
0 commit comments