From 5297363c2dc56448ac123da5b41820c40c2451c6 Mon Sep 17 00:00:00 2001 From: Niek Date: Fri, 18 Sep 2020 12:11:14 +0200 Subject: [PATCH] test: add invalidate query tests --- src/core/tests/queryCache.test.tsx | 22 ++++++++++++++++ src/react/tests/useQuery.test.tsx | 40 ++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/src/core/tests/queryCache.test.tsx b/src/core/tests/queryCache.test.tsx index ab24aaa797..76de2d128d 100644 --- a/src/core/tests/queryCache.test.tsx +++ b/src/core/tests/queryCache.test.tsx @@ -314,6 +314,28 @@ describe('queryCache', () => { expect(queryFn2).toHaveBeenCalledTimes(2) }) + test('invalidateQueries should not refetch inactive queries by default', async () => { + const key1 = queryKey() + const key2 = queryKey() + const queryFn1 = jest.fn() + const queryFn2 = jest.fn() + const cache = new QueryCache() + await cache.fetchQuery(key1, queryFn1) + await cache.fetchQuery(key2, queryFn2) + const query1 = cache.getQuery(key1)! + const observer = new QueryObserver({ + ...query1.config, + enabled: false, + staleTime: Infinity, + }) + observer.subscribe() + await cache.invalidateQueries(key1) + observer.unsubscribe() + cache.clear() + expect(queryFn1).toHaveBeenCalledTimes(1) + expect(queryFn2).toHaveBeenCalledTimes(1) + }) + test('getQueries should return queries that partially match queryKey', async () => { const key1 = queryKey() const key2 = queryKey() diff --git a/src/react/tests/useQuery.test.tsx b/src/react/tests/useQuery.test.tsx index a92546995f..2083bdf717 100644 --- a/src/react/tests/useQuery.test.tsx +++ b/src/react/tests/useQuery.test.tsx @@ -584,6 +584,46 @@ describe('useQuery', () => { }) }) + it('should not refetch disabled query when invalidated with invalidateQueries', async () => { + const key = queryKey() + const states: QueryResult[] = [] + let count = 0 + + function Page() { + const state = useQuery( + key, + async () => { + await sleep(10) + count++ + return count + }, + { enabled: false } + ) + + states.push(state) + + React.useEffect(() => { + setTimeout(() => { + queryCache.invalidateQueries(key) + }, 20) + }, []) + + return null + } + + render() + + await waitForMs(100) + + expect(states.length).toBe(1) + expect(states[0]).toMatchObject({ + data: undefined, + isFetching: false, + isSuccess: false, + isStale: true, + }) + }) + it('should keep the previous data when keepPreviousData is set', async () => { const key = queryKey() const states: QueryResult[] = []