Skip to content

Commit 461876a

Browse files
test(svelte-query): add refetch test for createQuery (#7810)
1 parent 99f1250 commit 461876a

File tree

2 files changed

+63
-0
lines changed

2 files changed

+63
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<script lang="ts">
2+
import { QueryClient } from '@tanstack/query-core'
3+
import { derived, writable } from 'svelte/store'
4+
import { createQuery } from '../../src/createQuery'
5+
import { sleep } from '../utils'
6+
import type { QueryObserverResult } from '@tanstack/query-core'
7+
import type { Writable } from 'svelte/store'
8+
9+
export let states: Writable<Array<QueryObserverResult>>
10+
11+
const queryClient = new QueryClient()
12+
const count = writable(0)
13+
14+
const options = derived(count, ($count) => ({
15+
queryKey: ['test'],
16+
queryFn: async () => {
17+
await sleep(5)
18+
return ++$count
19+
},
20+
}))
21+
22+
const query = createQuery(options, queryClient)
23+
24+
$: states.update((prev) => [...prev, $query])
25+
</script>
26+
27+
<button on:click={() => queryClient.removeQueries({ queryKey: ['test'] })}
28+
>Remove</button
29+
>
30+
<button on:click={() => $query.refetch()}>Refetch</button>
31+
32+
<div>Data: {$query.data ?? 'undefined'}</div>

packages/svelte-query/tests/createQuery/createQuery.test.ts

+31
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { sleep } from '../utils'
66
import BaseExample from './BaseExample.svelte'
77
import DisabledExample from './DisabledExample.svelte'
88
import PlaceholderData from './PlaceholderData.svelte'
9+
import RefetchExample from './RefetchExample.svelte'
910
import type { Writable } from 'svelte/store'
1011
import type { QueryObserverResult } from '@tanstack/query-core'
1112

@@ -387,4 +388,34 @@ describe('createQuery', () => {
387388
isSuccess: false,
388389
})
389390
})
391+
392+
test('Create a new query when refetching a removed query', async () => {
393+
const statesStore: Writable<Array<QueryObserverResult>> = writable([])
394+
395+
const rendered = render(RefetchExample, {
396+
props: {
397+
states: statesStore,
398+
},
399+
})
400+
401+
await waitFor(() => rendered.getByText('Data: 1'))
402+
fireEvent.click(rendered.getByRole('button', { name: /Remove/i }))
403+
404+
await sleep(5)
405+
406+
fireEvent.click(rendered.getByRole('button', { name: /Refetch/i }))
407+
await waitFor(() => rendered.getByText('Data: 2'))
408+
409+
const states = get(statesStore)
410+
411+
expect(states.length).toBe(4)
412+
// Initial
413+
expect(states[0]).toMatchObject({ data: undefined, dataUpdatedAt: 0 })
414+
// Fetched
415+
expect(states[1]).toMatchObject({ data: 1 })
416+
// Switch
417+
expect(states[2]).toMatchObject({ data: undefined, dataUpdatedAt: 0 })
418+
// Fetched
419+
expect(states[3]).toMatchObject({ data: 2 })
420+
})
390421
})

0 commit comments

Comments
 (0)