1- import { computed , reactive , ref , onUnmounted } from "vue-demi" ;
1+ import {
2+ computed ,
3+ reactive ,
4+ ref ,
5+ onUnmounted ,
6+ getCurrentInstance ,
7+ } from "vue-demi" ;
28import { QueryClient , QueryObserver , setLogger } from "react-query/core" ;
39import { useQuery } from "../src/useQuery" ;
410import { useBaseQuery } from "../src/useBaseQuery" ;
5- import { flushPromises , rejectFetcher , simpleFetcher , noop } from "./utils" ;
6-
7- jest . mock ( "vue" , ( ) => {
8- const vue = jest . requireActual ( "vue" ) ;
11+ import {
12+ flushPromises ,
13+ rejectFetcher ,
14+ simpleFetcher ,
15+ noop ,
16+ } from "./test-utils" ;
17+
18+ jest . mock ( "vue-demi" , ( ) => {
19+ const vue = jest . requireActual ( "vue-demi" ) ;
920 return {
1021 ...vue ,
1122 onUnmounted : jest . fn ( ) ,
23+ getCurrentInstance : jest . fn ( ) ,
1224 } ;
1325} ) ;
1426
@@ -37,7 +49,7 @@ describe("useQuery", () => {
3749 jest . clearAllMocks ( ) ;
3850 } ) ;
3951
40- test ( "should properly execute query with all three parameters " , ( ) => {
52+ test ( "should properly execute query" , ( ) => {
4153 useQuery ( "key0" , simpleFetcher , { staleTime : 1000 } ) ;
4254
4355 expect ( useBaseQuery ) . toBeCalledWith (
@@ -50,106 +62,49 @@ describe("useQuery", () => {
5062 ) ;
5163 } ) ;
5264
53- test ( "should properly execute query with queryKey and options" , ( ) => {
54- useQuery ( "key01" , { queryFn : simpleFetcher , staleTime : 1000 } ) ;
55-
56- expect ( useBaseQuery ) . toBeCalledWith (
57- {
58- queryFn : expect . anything ( ) ,
59- queryKey : "key01" ,
60- staleTime : 1000 ,
61- } ,
62- QueryObserver
63- ) ;
64- } ) ;
65-
66- test ( "should properly execute query with all three parameters" , ( ) => {
67- useQuery ( {
68- queryKey : "key02" ,
69- queryFn : simpleFetcher ,
70- staleTime : 1000 ,
71- } ) ;
72-
73- expect ( useBaseQuery ) . toBeCalledWith (
74- {
75- queryFn : expect . anything ( ) ,
76- queryKey : "key02" ,
77- staleTime : 1000 ,
78- } ,
79- QueryObserver
80- ) ;
81- } ) ;
82-
8365 test ( "should return loading status initially" , ( ) => {
84- const { status, isLoading, isFetching } = useQuery ( "key1" , simpleFetcher ) ;
85-
86- expect ( status . value ) . toEqual ( "loading" ) ;
87- expect ( isLoading . value ) . toEqual ( true ) ;
88- expect ( isFetching . value ) . toEqual ( true ) ;
89- } ) ;
90-
91- test ( "should be marked as stale initially" , ( ) => {
92- const { isStale } = useQuery ( "key2" , simpleFetcher ) ;
66+ const query = useQuery ( "key1" , simpleFetcher ) ;
9367
94- expect ( isStale . value ) . toEqual ( true ) ;
95- } ) ;
96-
97- test ( "should return false for other states initially" , ( ) => {
98- const { isSuccess, isError, isIdle, isFetched } = useQuery (
99- "key3" ,
100- simpleFetcher
101- ) ;
102-
103- expect ( isSuccess . value ) . toEqual ( false ) ;
104- expect ( isError . value ) . toEqual ( false ) ;
105- expect ( isIdle . value ) . toEqual ( false ) ;
106- expect ( isFetched . value ) . toEqual ( false ) ;
68+ expect ( query ) . toMatchObject ( {
69+ status : { value : "loading" } ,
70+ isLoading : { value : true } ,
71+ isFetching : { value : true } ,
72+ isStale : { value : true } ,
73+ } ) ;
10774 } ) ;
10875
10976 test ( "should resolve to success and update reactive state" , async ( ) => {
110- const {
111- status,
112- data,
113- isLoading,
114- isFetched,
115- isFetching,
116- isSuccess,
117- } = useQuery ( "key4" , simpleFetcher ) ;
77+ const query = useQuery ( "key2" , simpleFetcher ) ;
11878
11979 await flushPromises ( ) ;
12080
121- expect ( status . value ) . toEqual ( "success" ) ;
122- expect ( data . value ) . toEqual ( "Some data" ) ;
123- expect ( isLoading . value ) . toEqual ( false ) ;
124- expect ( isFetching . value ) . toEqual ( false ) ;
125- expect ( isFetched . value ) . toEqual ( true ) ;
126- expect ( isSuccess . value ) . toEqual ( true ) ;
81+ expect ( query ) . toMatchObject ( {
82+ status : { value : "success" } ,
83+ data : { value : "Some data" } ,
84+ isLoading : { value : false } ,
85+ isFetching : { value : false } ,
86+ isFetched : { value : true } ,
87+ isSuccess : { value : true } ,
88+ } ) ;
12789 } ) ;
12890
12991 test ( "should reject and update reactive state" , async ( ) => {
130- const {
131- status,
132- data,
133- error,
134- isLoading,
135- isFetched,
136- isFetching,
137- isError,
138- failureCount,
139- } = useQuery ( "key5" , rejectFetcher , {
92+ const query = useQuery ( "key3" , rejectFetcher , {
14093 retry : false ,
14194 } ) ;
14295
14396 await flushPromises ( ) ;
14497
145- expect ( status . value ) . toEqual ( "error" ) ;
146- expect ( data . value ) . toEqual ( undefined ) ;
147- expect ( ( error . value as Error ) . message ) . toEqual ( "Some error" ) ;
148- expect ( isLoading . value ) . toEqual ( false ) ;
149- expect ( isFetching . value ) . toEqual ( false ) ;
150- expect ( isFetched . value ) . toEqual ( true ) ;
151- expect ( isError . value ) . toEqual ( true ) ;
152- expect ( failureCount . value ) . toEqual ( 1 ) ;
98+ expect ( query ) . toMatchObject ( {
99+ status : { value : "error" } ,
100+ data : { value : undefined } ,
101+ error : { value : { message : "Some error" } } ,
102+ isLoading : { value : false } ,
103+ isFetching : { value : false } ,
104+ isFetched : { value : true } ,
105+ isError : { value : true } ,
106+ failureCount : { value : 1 } ,
107+ } ) ;
153108 } ) ;
154109
155110 test ( "should update query on reactive prop change" , async ( ) => {
@@ -215,4 +170,23 @@ describe("useQuery", () => {
215170
216171 expect ( status . value ) . toStrictEqual ( "loading" ) ;
217172 } ) ;
173+
174+ describe ( "suspense" , ( ) => {
175+ test ( "should return undefined by default" , ( ) => {
176+ const query = useQuery ( "suspense1" , simpleFetcher ) ;
177+ const result = query . suspense ( ) ;
178+
179+ expect ( result ) . toEqual ( undefined ) ;
180+ } ) ;
181+
182+ test ( "should return a Promise when inside a Suspense boundary" , ( ) => {
183+ const getCurrentInstanceSpy = getCurrentInstance as jest . Mock ;
184+ getCurrentInstanceSpy . mockImplementation ( ( ) => ( { suspense : { } } ) ) ;
185+
186+ const query = useQuery ( "suspense1" , simpleFetcher ) ;
187+ const result = query . suspense ( ) ;
188+
189+ expect ( result ) . toBeInstanceOf ( Promise ) ;
190+ } ) ;
191+ } ) ;
218192} ) ;
0 commit comments