@@ -9,6 +9,7 @@ import type { UseElementSizeReturn } from './useElementSize';
99import { useElementSize } from './useElementSize' ;
1010
1111const trigger = createTrigger < ResizeObserverCallback , Element > ( ) ;
12+ const mockGetBoundingClientRect = vi . spyOn ( Element . prototype , 'getBoundingClientRect' ) ;
1213const mockResizeObserverDisconnect = vi . fn ( ) ;
1314const mockResizeObserverObserve = vi . fn ( ) ;
1415const mockResizeObserver = class ResizeObserver {
@@ -32,7 +33,6 @@ const mockResizeObserver = class ResizeObserver {
3233
3334beforeEach ( ( ) => void vi . stubGlobal ( 'ResizeObserver' , mockResizeObserver ) ) ;
3435afterEach ( ( ) => void vi . unstubAllGlobals ( ) ) ;
35- afterEach ( ( ) => void vi . restoreAllMocks ( ) ) ;
3636
3737const targets = [
3838 undefined ,
@@ -49,6 +49,7 @@ targets.forEach((target) => {
4949
5050 describe ( `${ target } ` , ( ) => {
5151 it ( 'Should use element size' , ( ) => {
52+ mockGetBoundingClientRect . mockImplementation ( ( ) => new DOMRect ( 0 , 0 , 0 , 0 ) ) ;
5253 const { result } = renderHook ( ( ) => {
5354 if ( target )
5455 return useElementSize ( target ) as {
@@ -61,19 +62,23 @@ targets.forEach((target) => {
6162 } ) ;
6263
6364 it ( 'Should set initial value' , ( ) => {
65+ mockGetBoundingClientRect . mockImplementation ( ( ) => new DOMRect ( 0 , 0 , 200 , 200 ) ) ;
6466 const { result } = renderHook ( ( ) => {
65- if ( target ) return useElementSize ( target , { width : 200 , height : 200 } ) ;
66- return useElementSize < HTMLDivElement > ( { width : 200 , height : 200 } ) ;
67+ if ( target )
68+ return useElementSize ( target ) as {
69+ ref : StateRef < HTMLDivElement > ;
70+ } & UseElementSizeReturn ;
71+ return useElementSize < HTMLDivElement > ( ) ;
6772 } ) ;
6873
69- if ( ! target ) {
70- expect ( result . current . value ) . toStrictEqual ( { width : 200 , height : 200 } ) ;
71- } else {
72- expect ( result . current . value ) . toStrictEqual ( { width : 0 , height : 0 } ) ;
73- }
74+ if ( ! target )
75+ act ( ( ) => result . current . ref ( document . getElementById ( 'target' ) ! as HTMLDivElement ) ) ;
76+
77+ expect ( result . current . value ) . toStrictEqual ( { width : 200 , height : 200 } ) ;
7478 } ) ;
7579
7680 it ( 'Should change value after resize' , ( ) => {
81+ mockGetBoundingClientRect . mockImplementation ( ( ) => new DOMRect ( 0 , 0 , 0 , 0 ) ) ;
7782 const { result } = renderHook ( ( ) => {
7883 if ( target )
7984 return useElementSize ( target ) as {
@@ -91,20 +96,17 @@ targets.forEach((target) => {
9196 const element = ( target ? getElement ( target ) : result . current . ref . current ) as Element ;
9297 if ( ! element ) return ;
9398
94- vi . spyOn ( Element . prototype , 'getBoundingClientRect' ) . mockImplementation (
95- ( ) => new DOMRect ( 0 , 0 , 200 , 200 )
96- ) ;
99+ mockGetBoundingClientRect . mockImplementation ( ( ) => new DOMRect ( 0 , 0 , 200 , 200 ) ) ;
97100
98- trigger . callback ( element , [
99- { contentRect : { width : 200 , height : 200 } }
100- ] as unknown as ResizeObserverEntry [ ] ) ;
101+ trigger . callback ( element ) ;
101102 } ) ;
102103
103104 expect ( mockResizeObserverObserve ) . toHaveBeenCalledTimes ( 1 ) ;
104105 expect ( result . current . value ) . toStrictEqual ( { width : 200 , height : 200 } ) ;
105106 } ) ;
106107
107108 it ( 'Should disconnect on onmount' , ( ) => {
109+ mockGetBoundingClientRect . mockImplementation ( ( ) => new DOMRect ( 0 , 0 , 0 , 0 ) ) ;
108110 const { result, unmount } = renderHook ( ( ) => {
109111 if ( target )
110112 return useElementSize ( target ) as {
0 commit comments