Skip to content

Commit

Permalink
test: stabilize flaky tests (#4397)
Browse files Browse the repository at this point in the history
* test: stabilize a flaky test for notifyOnChangeProps

* test: stabilize a flaky test for cacheTime 0 and rerendering

* test: add sleep to make sure no additional renders are happening after data is successfully fetched for the second time

* test: stabilize test for switching to a disabled query

* test: small improvements to a test for disabled query

* test: stabilize test for "previous data on disabled query when keepPreviousData is set"

* test: run prettier
  • Loading branch information
zorzysty committed Oct 29, 2022
1 parent 7f7e759 commit 1fe9356
Showing 1 changed file with 93 additions and 41 deletions.
134 changes: 93 additions & 41 deletions packages/react-query/src/__tests__/useQuery.test.tsx
Expand Up @@ -873,20 +873,35 @@ describe('useQuery', () => {

states.push(state)

const { remove } = state

React.useEffect(() => {
setActTimeout(() => {
remove()
rerender({})
}, 20)
}, [remove])
return (
<>
<div>{state.data}</div>

return null
<button
onClick={() => {
state.remove()
rerender({})
}}
>
remove
</button>
</>
)
}

renderWithClient(queryClient, <Page />)
const rendered = renderWithClient(queryClient, <Page />)

await waitFor(() => {
rendered.getByText('data')
})

fireEvent.click(rendered.getByRole('button', { name: 'remove' }))

await waitFor(() => {
rendered.getByText('data')
})

// required to make sure no additional renders are happening after data is successfully fetched for the second time
await sleep(100)

expect(states.length).toBe(5)
Expand Down Expand Up @@ -1518,17 +1533,27 @@ describe('useQuery', () => {

states.push(state)

React.useEffect(() => {
setActTimeout(() => {
setCount(1)
}, 10)
}, [])

return null
return (
<div>
<button onClick={() => setCount(1)}>increment</button>
<div>data: {state.data ?? 'undefined'}</div>
<div>count: {count}</div>
</div>
)
}

renderWithClient(queryClient, <Page />)
const rendered = renderWithClient(queryClient, <Page />)

await waitFor(() => rendered.getByText('data: 0'))

fireEvent.click(rendered.getByRole('button', { name: /increment/i }))

await waitFor(() => {
rendered.getByText('count: 1')
rendered.getByText('data: undefined')
})

// making sure no additional fetches are triggered
await sleep(50)

expect(states.length).toBe(3)
Expand Down Expand Up @@ -1812,26 +1837,41 @@ describe('useQuery', () => {

states.push(state)

const { refetch } = state
return (
<div>
<button onClick={() => state.refetch()}>refetch</button>
<button onClick={() => setCount(1)}>setCount</button>
<div>data: {state.data ?? 'undefined'}</div>
</div>
)
}

React.useEffect(() => {
refetch()
const rendered = renderWithClient(queryClient, <Page />)

setActTimeout(() => {
setCount(1)
}, 20)
await waitFor(() => {
rendered.getByText('data: undefined')
})

setActTimeout(() => {
refetch()
}, 30)
}, [refetch])
fireEvent.click(rendered.getByRole('button', { name: 'refetch' }))

return null
}
await waitFor(() => {
rendered.getByText('data: 0')
})

renderWithClient(queryClient, <Page />)
fireEvent.click(rendered.getByRole('button', { name: 'setCount' }))

await sleep(100)
await waitFor(() => {
rendered.getByText('data: 0')
})

fireEvent.click(rendered.getByRole('button', { name: 'refetch' }))

await waitFor(() => {
rendered.getByText('data: 1')
})

// making sure no additional renders are triggered
await sleep(20)

expect(states.length).toBe(6)

Expand Down Expand Up @@ -2194,19 +2234,31 @@ describe('useQuery', () => {

states.push(state)

const { refetch } = state
return (
<>
<button
onClick={async () => {
await state.refetch()
}}
>
refetch
</button>

React.useEffect(() => {
setActTimeout(() => {
refetch()
}, 10)
}, [refetch])
return null
<div>{state.data}</div>
</>
)
}

renderWithClient(queryClient, <Page />)
const rendered = renderWithClient(queryClient, <Page />)

await sleep(30)
await waitFor(() => {
rendered.getByText('test')
})

fireEvent.click(rendered.getByRole('button', { name: 'refetch' }))

// sleep is required to make sure no additional renders happen after click
await sleep(20)

expect(states.length).toBe(2)
expect(states[0]).toMatchObject({
Expand Down

0 comments on commit 1fe9356

Please sign in to comment.