Skip to content

Commit b5306ab

Browse files
authored
Chore: add test for callback setSize (#1373)
* add test for callback setSize * replace sleep 1 with nextTick
1 parent a553657 commit b5306ab

File tree

1 file changed

+43
-4
lines changed

1 file changed

+43
-4
lines changed

test/use-swr-infinite.test.tsx

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React, { useEffect, useState } from 'react'
22
import { render, fireEvent, act, screen } from '@testing-library/react'
33
import { mutate, useSWRConfig, SWRConfig } from 'swr'
44
import useSWRInfinite, { unstable_serialize } from 'swr/infinite'
5-
import { sleep, createKey, createResponse } from './utils'
5+
import { sleep, createKey, createResponse, nextTick } from './utils'
66

77
describe('useSWRInfinite', () => {
88
it('should render the first page component', async () => {
@@ -693,11 +693,50 @@ describe('useSWRInfinite', () => {
693693

694694
await screen.findByText('set size')
695695
fireEvent.click(screen.getByText('set size'))
696-
await act(() => sleep(1))
696+
await nextTick()
697697

698698
expect(loggedValues).toEqual([1])
699699
})
700700

701+
it('should correctly set size when setSize receives a callback', async () => {
702+
const key = createKey()
703+
704+
function Page() {
705+
const { data, size, setSize } = useSWRInfinite<string, string>(
706+
index => `${key}-${index}`,
707+
k => createResponse(`page-${k}`)
708+
)
709+
return (
710+
<div>
711+
<p>data: {(data || []).join()}</p>
712+
<p>size: {size}</p>
713+
<button onClick={() => setSize(sz => sz + 1)}>set size</button>
714+
</div>
715+
)
716+
}
717+
718+
const getDataBySize = size =>
719+
Array<string>(size)
720+
.fill('')
721+
.map((_, index) => `page-${key}-${index}`)
722+
.join()
723+
724+
render(<Page />)
725+
726+
await screen.findByText('set size')
727+
const btn = screen.getByText('set size')
728+
729+
fireEvent.click(btn)
730+
await nextTick()
731+
await screen.findByText(`data: ${getDataBySize(2)}`)
732+
await screen.findByText('size: 2')
733+
734+
fireEvent.click(btn)
735+
await nextTick()
736+
await screen.findByText(`data: ${getDataBySize(3)}`)
737+
await screen.findByText('size: 3')
738+
})
739+
701740
// https://github.com/vercel/swr/issues/908
702741
it('should revalidate first page after mutating', async () => {
703742
let renderedData
@@ -729,10 +768,10 @@ describe('useSWRInfinite', () => {
729768
render(<Page />)
730769

731770
await screen.findByText('mutate')
732-
await act(() => sleep(1))
771+
await nextTick()
733772
expect(renderedData).toEqual(['old'])
734773
fireEvent.click(screen.getByText('mutate'))
735-
await act(() => sleep(1))
774+
await nextTick()
736775
expect(renderedData).toEqual(['new'])
737776
})
738777

0 commit comments

Comments
 (0)