Skip to content

Commit 4eb20bb

Browse files
committed
test: tests for suspense, refactor
1 parent 7b2a8c4 commit 4eb20bb

File tree

5 files changed

+81
-102
lines changed

5 files changed

+81
-102
lines changed

tests/useInfiniteQuery.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { QueryClient, setLogger } from "react-query/core";
22
import { useInfiniteQuery } from "../src/useInfiniteQuery";
3-
import { noop, infiniteFetcher, flushPromises } from "./utils";
3+
import { noop, infiniteFetcher, flushPromises } from "./test-utils";
44

5-
jest.mock("vue", () => {
6-
const vue = jest.requireActual("vue");
5+
jest.mock("vue-demi", () => {
6+
const vue = jest.requireActual("vue-demi");
77
return {
88
...vue,
99
onUnmounted: jest.fn(),

tests/useIsFetching.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ import { onUnmounted } from "vue-demi";
22
import { QueryClient, setLogger } from "react-query/core";
33
import { useQuery } from "../src/useQuery";
44
import { useIsFetching } from "../src/useIsFetching";
5-
import { flushPromises, simpleFetcher, noop } from "./utils";
5+
import { flushPromises, simpleFetcher, noop } from "./test-utils";
66

7-
jest.mock("vue", () => {
8-
const vue = jest.requireActual("vue");
7+
jest.mock("vue-demi", () => {
8+
const vue = jest.requireActual("vue-demi");
99
return {
1010
...vue,
1111
onUnmounted: jest.fn(),

tests/useIsMutating.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ import { onUnmounted } from "vue-demi";
22
import { QueryClient, setLogger } from "react-query/core";
33
import { useMutation } from "../src/useMutation";
44
import { useIsMutating } from "../src/useIsMutating";
5-
import { flushPromises, noop, successMutator } from "./utils";
5+
import { flushPromises, noop, successMutator } from "./test-utils";
66

7-
jest.mock("vue", () => {
8-
const vue = jest.requireActual("vue");
7+
jest.mock("vue-demi", () => {
8+
const vue = jest.requireActual("vue-demi");
99
return {
1010
...vue,
1111
onUnmounted: jest.fn(),

tests/useMutation.test.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
import { QueryClient, setLogger } from "react-query/core";
22

3-
import { errorMutator, flushPromises, noop, successMutator } from "./utils";
3+
import {
4+
errorMutator,
5+
flushPromises,
6+
noop,
7+
successMutator,
8+
} from "./test-utils";
49
import { useMutation } from "../src/useMutation";
510

6-
jest.mock("vue", () => {
7-
const vue = jest.requireActual("vue");
11+
jest.mock("vue-demi", () => {
12+
const vue = jest.requireActual("vue-demi");
813
return {
914
...vue,
1015
onUnmounted: jest.fn(),

tests/useQuery.test.ts

Lines changed: 64 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,26 @@
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";
28
import { QueryClient, QueryObserver, setLogger } from "react-query/core";
39
import { useQuery } from "../src/useQuery";
410
import { 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

Comments
 (0)