Skip to content

Commit 24ed7f9

Browse files
author
Aryan Deora
committed
fix(query-core): Add react-query test
1 parent a5ed15f commit 24ed7f9

1 file changed

Lines changed: 84 additions & 0 deletions

File tree

packages/react-query/src/__tests__/useQuery.test.tsx

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1797,6 +1797,90 @@ describe('useQuery', () => {
17971797
})
17981798
})
17991799

1800+
it('should show placeholderData between multiple pending queries when select fn transform is used', async () => {
1801+
const key = queryKey()
1802+
const states: UseQueryResult<number>[] = []
1803+
1804+
function Page() {
1805+
const [count, setCount] = React.useState(0)
1806+
1807+
const state = useQuery({
1808+
queryKey: [key, count],
1809+
queryFn: async () => {
1810+
await sleep(10)
1811+
return {
1812+
count,
1813+
}
1814+
},
1815+
select(data) {
1816+
return data.count
1817+
},
1818+
placeholderData: keepPreviousData,
1819+
})
1820+
1821+
states.push(state)
1822+
1823+
return (
1824+
<div>
1825+
<div>data: {state.data}</div>
1826+
<button onClick={() => setCount((prev) => prev + 1)}>setCount</button>
1827+
</div>
1828+
)
1829+
}
1830+
1831+
const rendered = renderWithClient(queryClient, <Page />)
1832+
1833+
await waitFor(() => rendered.getByText('data: 0'))
1834+
1835+
fireEvent.click(rendered.getByRole('button', { name: 'setCount' }))
1836+
fireEvent.click(rendered.getByRole('button', { name: 'setCount' }))
1837+
fireEvent.click(rendered.getByRole('button', { name: 'setCount' }))
1838+
1839+
await waitFor(() => rendered.getByText('data: 3'))
1840+
// Initial
1841+
expect(states[0]).toMatchObject({
1842+
data: undefined,
1843+
isFetching: true,
1844+
isSuccess: false,
1845+
isPlaceholderData: false,
1846+
})
1847+
// Fetched
1848+
expect(states[1]).toMatchObject({
1849+
data: 0,
1850+
isFetching: false,
1851+
isSuccess: true,
1852+
isPlaceholderData: false,
1853+
})
1854+
// Set state -> count = 1
1855+
expect(states[2]).toMatchObject({
1856+
data: 0,
1857+
isFetching: true,
1858+
isSuccess: true,
1859+
isPlaceholderData: true,
1860+
})
1861+
// Set state -> count = 2
1862+
expect(states[3]).toMatchObject({
1863+
data: 0,
1864+
isFetching: true,
1865+
isSuccess: true,
1866+
isPlaceholderData: true,
1867+
})
1868+
// Set state -> count = 3
1869+
expect(states[4]).toMatchObject({
1870+
data: 0,
1871+
isFetching: true,
1872+
isSuccess: true,
1873+
isPlaceholderData: true,
1874+
})
1875+
// New data
1876+
expect(states[5]).toMatchObject({
1877+
data: 3,
1878+
isFetching: false,
1879+
isSuccess: true,
1880+
isPlaceholderData: false,
1881+
})
1882+
})
1883+
18001884
it('should transition to error state when placeholderData is set', async () => {
18011885
const key = queryKey()
18021886
const states: UseQueryResult<number>[] = []

0 commit comments

Comments
 (0)