Skip to content

Commit 67a4db8

Browse files
committed
test: getData & onChange changes
1 parent 41ebdd0 commit 67a4db8

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

src/internal/useGet.spec.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { newPromise, newSymbol } from "../__testfixtures__";
33
import { useGet } from "./useGet";
44
import { it, expect, beforeEach, describe, vi } from "vitest";
55

6-
const result1 = newSymbol("Result 1");
7-
const result2 = newSymbol("Result 2");
6+
const result1 = newSymbol<string>("Result 1");
7+
const result2 = newSymbol<string>("Result 2");
88
const error = newSymbol("Error");
99

1010
const refA1 = newSymbol("Ref A1");
@@ -126,3 +126,24 @@ describe("when ref changes", () => {
126126
});
127127
});
128128
});
129+
130+
it("refetches if `getData` changes", async () => {
131+
const getData1 = vi.fn().mockResolvedValue(result1);
132+
const getData2 = vi.fn().mockResolvedValue(result2);
133+
134+
const { result, rerender } = renderHook(({ getData }) => useGet(refA1, getData, isEqual), {
135+
initialProps: { getData: getData1 },
136+
});
137+
138+
await waitFor(() => {
139+
expect(result.current).toStrictEqual([result1, false, undefined]);
140+
});
141+
expect(getData1).toHaveBeenCalledTimes(1);
142+
143+
rerender({ getData: getData2 });
144+
145+
await waitFor(() => {
146+
expect(result.current).toStrictEqual([result2, false, undefined]);
147+
});
148+
expect(getData2).toHaveBeenCalledTimes(1);
149+
});

src/internal/useListen.spec.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,3 +140,20 @@ it("should return emitted error", () => {
140140
act(() => setValue(result2));
141141
expect(result.current).toStrictEqual([result2, false, undefined]);
142142
});
143+
144+
it("resubscribes if `onChange` changes", async () => {
145+
const onChange1 = vi.fn().mockReturnValue(onChangeUnsubscribe);
146+
147+
const { result, rerender } = renderHook(({ onChange }) => useListen(refA1, onChange, isEqual, LoadingState), {
148+
initialProps: { onChange: onChange1 },
149+
});
150+
const setValue1 = onChange1.mock.calls[0][1];
151+
act(() => setValue1(result1));
152+
expect(result.current).toStrictEqual([result1, false, undefined]);
153+
154+
const onChange2 = vi.fn().mockReturnValue(onChangeUnsubscribe);
155+
rerender({ onChange: onChange2 });
156+
const setValue2 = onChange1.mock.calls[0][1];
157+
act(() => setValue2(result2));
158+
expect(result.current).toStrictEqual([result2, false, undefined]);
159+
});

0 commit comments

Comments
 (0)