1
+ import React from "react" ;
1
2
import {
2
3
renderHook ,
3
4
originalRenderHook ,
7
8
axios ,
8
9
} from "./utils" ;
9
10
10
- import type { Resource } from "../src" ;
11
+ import type { Resource , RequestContextConfig } from "../src" ;
11
12
import {
13
+ request ,
12
14
useResource ,
13
15
RequestProvider ,
14
16
wrapCache ,
@@ -533,7 +535,7 @@ describe("useResource - cache", () => {
533
535
) ,
534
536
{
535
537
// eslint-disable-next-line react/display-name
536
- wrapper : ( props ) => (
538
+ wrapper : ( props : RequestContextConfig ) => (
537
539
< RequestProvider
538
540
instance = { axios }
539
541
cache = { mycache }
@@ -563,7 +565,7 @@ describe("useResource - cache", () => {
563
565
) ,
564
566
{
565
567
// eslint-disable-next-line react/display-name
566
- wrapper : ( props ) => (
568
+ wrapper : ( props : RequestContextConfig ) => (
567
569
< RequestProvider
568
570
instance = { axios }
569
571
cache = { mycache }
@@ -599,7 +601,7 @@ describe("useResource - cache", () => {
599
601
) ,
600
602
{
601
603
// eslint-disable-next-line react/display-name
602
- wrapper : ( props ) => (
604
+ wrapper : ( props : RequestContextConfig ) => (
603
605
< RequestProvider
604
606
instance = { axios }
605
607
cache = { mycache }
@@ -636,7 +638,7 @@ describe("useResource - cache", () => {
636
638
( ) => useResource ( ( ) => reqConfig ) ,
637
639
{
638
640
// eslint-disable-next-line react/display-name
639
- wrapper : ( props ) => (
641
+ wrapper : ( props : RequestContextConfig ) => (
640
642
< RequestProvider instance = { axios } cache = { mycache } { ...props } />
641
643
) ,
642
644
} ,
@@ -655,7 +657,7 @@ describe("useResource - cache", () => {
655
657
( ) => useResource ( ( ) => reqConfig , undefined , { cacheKey : customKey } ) ,
656
658
{
657
659
// eslint-disable-next-line react/display-name
658
- wrapper : ( props ) => (
660
+ wrapper : ( props : RequestContextConfig ) => (
659
661
< RequestProvider instance = { axios } cache = { mycache } { ...props } />
660
662
) ,
661
663
} ,
@@ -807,3 +809,102 @@ describe("useResource - custom instance", () => {
807
809
} ) ;
808
810
} ) ;
809
811
} ) ;
812
+
813
+ describe ( "useResource - check types" , ( ) => {
814
+ const getUserReqConfig = ( id : string ) =>
815
+ request < { id : string ; name : string } > ( {
816
+ url : `/user/${ id } ` ,
817
+ method : "get" ,
818
+ } ) ;
819
+
820
+ const callTimesFn = jest . fn ( ) ;
821
+
822
+ beforeAll ( ( ) => {
823
+ mockAdapter . onGet ( / \/ u s e r \/ \w + / ) . reply ( ( config ) => {
824
+ const _id = config . url ?. replace ( / \/ u s e r \/ / , "" ) . split ( "/" ) ?. [ 0 ] ;
825
+ if ( _id ) {
826
+ callTimesFn ( ) ;
827
+ return [ 200 , { id : _id , name : `name${ _id } ` } ] ;
828
+ }
829
+ return [ 404 ] ;
830
+ } ) ;
831
+ } ) ;
832
+
833
+ it ( "check types & refresh func" , async ( ) => {
834
+ const { result, waitFor, rerender } = renderHook ( ( id : string ) =>
835
+ useResource ( getUserReqConfig , [ id ] , {
836
+ filter : ( p ) => ! ! p ,
837
+ } ) ,
838
+ ) ;
839
+ expect ( result . current [ 0 ] . isLoading ) . toBeFalsy ( ) ;
840
+ expect ( result . current [ 0 ] . data ) . toBeUndefined ( ) ;
841
+ expect ( result . current [ 0 ] . response ) . toBeUndefined ( ) ;
842
+ expect ( callTimesFn ) . toHaveBeenCalledTimes ( 0 ) ;
843
+
844
+ void act ( ( ) => {
845
+ result . current [ 1 ] ( "001" ) ;
846
+ } ) ;
847
+
848
+ expect ( result . current [ 0 ] . isLoading ) . toBeTruthy ( ) ;
849
+ expect ( result . current [ 0 ] . data ) . toBeUndefined ( ) ;
850
+ expect ( result . current [ 0 ] . response ) . toBeUndefined ( ) ;
851
+ expect ( callTimesFn ) . toHaveBeenCalledTimes ( 1 ) ;
852
+
853
+ await waitFor ( ( ) => {
854
+ expect ( result . current [ 0 ] . error ) . toBeUndefined ( ) ;
855
+ expect ( result . current [ 0 ] . isLoading ) . toBeFalsy ( ) ;
856
+ expect ( result . current [ 0 ] . data ?. id ) . toBe ( "001" ) ;
857
+ expect ( result . current [ 0 ] . data ?. name ) . toBe ( "name001" ) ;
858
+ expect ( callTimesFn ) . toHaveBeenCalledTimes ( 1 ) ;
859
+ } ) ;
860
+
861
+ void act ( ( ) => {
862
+ result . current [ 2 ] ( ) ;
863
+ } ) ;
864
+
865
+ expect ( result . current [ 0 ] . isLoading ) . toBeFalsy ( ) ;
866
+ expect ( result . current [ 0 ] . data ?. id ) . toBe ( "001" ) ;
867
+ expect ( result . current [ 0 ] . data ?. name ) . toBe ( "name001" ) ;
868
+ expect ( callTimesFn ) . toHaveBeenCalledTimes ( 1 ) ;
869
+
870
+ rerender ( "002" ) ;
871
+ expect ( result . current [ 0 ] . isLoading ) . toBeTruthy ( ) ;
872
+ expect ( result . current [ 0 ] . data ?. id ) . toBe ( "001" ) ;
873
+ expect ( result . current [ 0 ] . data ?. name ) . toBe ( "name001" ) ;
874
+ expect ( callTimesFn ) . toHaveBeenCalledTimes ( 2 ) ;
875
+ await waitFor ( ( ) => {
876
+ expect ( result . current [ 0 ] . isLoading ) . toBeFalsy ( ) ;
877
+ expect ( result . current [ 0 ] . data ?. id ) . toBe ( "002" ) ;
878
+ expect ( result . current [ 0 ] . data ?. name ) . toBe ( "name002" ) ;
879
+ expect ( callTimesFn ) . toHaveBeenCalledTimes ( 2 ) ;
880
+ } ) ;
881
+
882
+ void act ( ( ) => {
883
+ result . current [ 2 ] ( ) ;
884
+ } ) ;
885
+ expect ( result . current [ 0 ] . isLoading ) . toBeTruthy ( ) ;
886
+ expect ( result . current [ 0 ] . data ?. id ) . toBe ( "002" ) ;
887
+ expect ( result . current [ 0 ] . data ?. name ) . toBe ( "name002" ) ;
888
+ expect ( callTimesFn ) . toHaveBeenCalledTimes ( 3 ) ;
889
+ await waitFor ( ( ) => {
890
+ expect ( result . current [ 0 ] . isLoading ) . toBeFalsy ( ) ;
891
+ expect ( result . current [ 0 ] . data ?. id ) . toBe ( "002" ) ;
892
+ expect ( result . current [ 0 ] . data ?. name ) . toBe ( "name002" ) ;
893
+ expect ( callTimesFn ) . toHaveBeenCalledTimes ( 3 ) ;
894
+ } ) ;
895
+
896
+ // void act(() => {
897
+ // result.current[2]("003");
898
+ // });
899
+ // expect(result.current[0].isLoading).toBeTruthy();
900
+ // expect(result.current[0].data?.id).toBe("002");
901
+ // expect(result.current[0].data?.name).toBe("name002");
902
+ // expect(callTimesFn).toHaveBeenCalledTimes(4);
903
+ // await waitFor(() => {
904
+ // expect(result.current[0].isLoading).toBeFalsy();
905
+ // expect(result.current[0].data?.id).toBe("003");
906
+ // expect(result.current[0].data?.name).toBe("name003");
907
+ // expect(callTimesFn).toHaveBeenCalledTimes(4);
908
+ // });
909
+ } ) ;
910
+ } ) ;
0 commit comments