File tree Expand file tree Collapse file tree 2 files changed +32
-1
lines changed Expand file tree Collapse file tree 2 files changed +32
-1
lines changed Original file line number Diff line number Diff line change @@ -99,7 +99,7 @@ const useAsync = (arg1, arg2) => {
9999 setData,
100100 setError,
101101 } ) ,
102- [ state ]
102+ [ state , deferFn , onResolve , onReject ]
103103 )
104104}
105105
Original file line number Diff line number Diff line change @@ -41,6 +41,37 @@ describe("useAsync", () => {
4141 await waitForElement ( ( ) => getByText ( "done" ) )
4242 expect ( onResolve ) . toHaveBeenCalledWith ( "done" )
4343 } )
44+
45+ test ( "calling run() will always use the latest onResolve/onReject callbacks" , async ( ) => {
46+ const promiseFn = jest . fn ( ( ) => resolveTo ( ) )
47+ const deferFn = ( ) => resolveTo ( )
48+ function App ( ) {
49+ const [ count , setCount ] = React . useState ( 0 )
50+ const { reload } = useAsync ( {
51+ promiseFn,
52+ count,
53+ watch : count ,
54+ } )
55+ const { run } = useAsync ( {
56+ deferFn,
57+ onResolve : reload ,
58+ } )
59+ return (
60+ < div >
61+ < button onClick = { ( ) => setCount ( n => n + 1 ) } > inc</ button >
62+ < button onClick = { ( ) => run ( ) } > run</ button >
63+ </ div >
64+ )
65+ }
66+ const { getByText } = render ( < App /> )
67+ expect ( promiseFn ) . toHaveBeenLastCalledWith ( expect . objectContaining ( { count : 0 } ) , abortCtrl )
68+ fireEvent . click ( getByText ( "inc" ) )
69+ await resolveTo ( ) // resolve promiseFn
70+ expect ( promiseFn ) . toHaveBeenLastCalledWith ( expect . objectContaining ( { count : 1 } ) , abortCtrl )
71+ fireEvent . click ( getByText ( "run" ) )
72+ await resolveTo ( ) // resolve deferFn
73+ expect ( promiseFn ) . toHaveBeenLastCalledWith ( expect . objectContaining ( { count : 1 } ) , abortCtrl )
74+ } )
4475} )
4576
4677describe ( "useFetch" , ( ) => {
You can’t perform that action at this time.
0 commit comments