File tree 2 files changed +32
-1
lines changed
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) => {
99
99
setData,
100
100
setError,
101
101
} ) ,
102
- [ state ]
102
+ [ state , deferFn , onResolve , onReject ]
103
103
)
104
104
}
105
105
Original file line number Diff line number Diff line change @@ -41,6 +41,37 @@ describe("useAsync", () => {
41
41
await waitForElement ( ( ) => getByText ( "done" ) )
42
42
expect ( onResolve ) . toHaveBeenCalledWith ( "done" )
43
43
} )
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
+ } )
44
75
} )
45
76
46
77
describe ( "useFetch" , ( ) => {
You can’t perform that action at this time.
0 commit comments