11// @flow strict
2- import { renderHook , act } from '@testing-library/react-hooks ' ;
2+ import { renderHook , act , waitFor } from '@testing-library/react' ;
33import * as PopperJs from '@popperjs/core' ;
44
55// Public API
@@ -14,7 +14,7 @@ describe('userPopper', () => {
1414 } ) ;
1515
1616 it ( 'initializes the Popper instance' , async ( ) => {
17- const { result, waitFor } = renderHook ( ( ) =>
17+ const { result } = renderHook ( ( ) =>
1818 usePopper ( referenceElement , popperElement )
1919 ) ;
2020
@@ -25,7 +25,7 @@ describe('userPopper', () => {
2525
2626 it ( "doesn't update Popper instance on props update if not needed by Popper" , async ( ) => {
2727 const spy = jest . spyOn ( PopperJs , 'createPopper' ) ;
28- const { waitFor , rerender } = renderHook (
28+ const { rerender } = renderHook (
2929 ( { referenceElement, popperElement } ) =>
3030 usePopper ( referenceElement , popperElement ) ,
3131 { initialProps : { referenceElement, popperElement } }
@@ -43,51 +43,61 @@ describe('userPopper', () => {
4343 it ( 'updates Popper on explicitly listed props change' , async ( ) => {
4444 const spy = jest . spyOn ( PopperJs , 'createPopper' ) ;
4545
46- const { waitForNextUpdate , rerender } = renderHook (
46+ const { rerender } = renderHook (
4747 ( { referenceElement, popperElement } ) =>
4848 usePopper ( referenceElement , popperElement ) ,
4949 { initialProps : { referenceElement, popperElement } }
5050 ) ;
5151
52- rerender ( {
53- referenceElement,
54- popperElement : document . createElement ( 'div' ) ,
52+ await act ( async ( ) => {
53+ rerender ( {
54+ referenceElement,
55+ popperElement : document . createElement ( 'div' ) ,
56+ } ) ;
5557 } ) ;
5658
57- await waitForNextUpdate ( ) ;
58- expect ( spy ) . toHaveBeenCalledTimes ( 2 ) ;
59+ await waitFor ( ( ) => {
60+ expect ( spy ) . toHaveBeenCalledTimes ( 2 ) ;
61+ } ) ;
5962 } ) ;
6063
6164 it ( 'does not update Popper on generic props change' , async ( ) => {
6265 const spy = jest . spyOn ( PopperJs , 'createPopper' ) ;
63- const { waitForNextUpdate , rerender } = renderHook (
66+ const { rerender } = renderHook (
6467 ( { referenceElement, popperElement, options } ) =>
6568 usePopper ( referenceElement , popperElement , options ) ,
6669 { initialProps : { referenceElement, popperElement } }
6770 ) ;
6871
69- rerender ( {
70- referenceElement,
71- popperElement,
72- options : { foo : 'bar' } ,
72+ await act ( async ( ) => {
73+ rerender ( {
74+ referenceElement,
75+ popperElement,
76+ options : { foo : 'bar' } ,
77+ } ) ;
7378 } ) ;
7479
75- await waitForNextUpdate ( ) ;
76-
77- expect ( spy ) . not . toHaveBeenCalledTimes ( 2 ) ;
80+ await waitFor ( ( ) => {
81+ expect ( spy ) . toHaveBeenCalledTimes ( 1 ) ;
82+ } ) ;
7883 } ) ;
7984
8085 it ( 'destroys Popper on instance on unmount' , async ( ) => {
8186 const spy = jest . spyOn ( PopperJs , 'createPopper' ) ;
82- const { waitForNextUpdate , unmount } = renderHook ( ( ) =>
87+ const { unmount } = renderHook ( ( ) =>
8388 usePopper ( referenceElement , popperElement )
8489 ) ;
8590
86- await waitForNextUpdate ( ) ;
91+ await waitFor ( ( ) => {
92+ expect ( spy . mock . results [ 0 ] ) . toBeDefined ( ) ;
93+ } ) ;
94+
8795 const popperInstance = spy . mock . results [ 0 ] . value ;
8896 const destroy = jest . spyOn ( popperInstance , 'destroy' ) ;
8997
90- await unmount ( ) ;
98+ await act ( async ( ) => {
99+ await unmount ( ) ;
100+ } ) ;
91101
92102 expect ( destroy ) . toHaveBeenCalled ( ) ;
93103 } ) ;
@@ -97,7 +107,7 @@ describe('userPopper', () => {
97107 const popperElementWithArrow = document . createElement ( 'div' ) ;
98108 popperElementWithArrow . appendChild ( arrowElement ) ;
99109
100- const { result, waitForNextUpdate } = renderHook ( ( ) =>
110+ const { result } = renderHook ( ( ) =>
101111 usePopper ( referenceElement , popperElementWithArrow , {
102112 placement : 'bottom' ,
103113 modifiers : [ { name : 'arrow' , options : { element : arrowElement } } ] ,
@@ -107,8 +117,8 @@ describe('userPopper', () => {
107117 expect ( result . current . styles . arrow . position ) . toBe ( 'absolute' ) ;
108118 expect ( result . current . styles . arrow . transform ) . toBeUndefined ( ) ;
109119
110- await waitForNextUpdate ( ) ;
111-
112- expect ( result . current . styles . arrow . transform ) . toBeDefined ( ) ;
120+ await waitFor ( ( ) => {
121+ expect ( result . current . styles . arrow . transform ) . toBeDefined ( ) ;
122+ } ) ;
113123 } ) ;
114124} ) ;
0 commit comments