Skip to content

Commit f94ed77

Browse files
committed
test(react/vanilla-utils/atomWithRefresh): replace 'userEvent' with 'fireEvent', 'findByText' with 'getByText', and add fake timer
1 parent f9fad21 commit f94ed77

File tree

1 file changed

+40
-37
lines changed

1 file changed

+40
-37
lines changed
Lines changed: 40 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
import { StrictMode, Suspense } from 'react'
2-
import { act, render, screen } from '@testing-library/react'
3-
import userEventOrig from '@testing-library/user-event'
4-
import { expect, it } from 'vitest'
2+
import { act, fireEvent, render, screen } from '@testing-library/react'
3+
import { afterEach, beforeEach, expect, it, vi } from 'vitest'
54
import { useAtom } from 'jotai/react'
65
import { atomWithRefresh } from 'jotai/vanilla/utils'
76

8-
const userEvent = {
9-
click: (element: Element) => act(() => userEventOrig.click(element)),
10-
}
7+
beforeEach(() => {
8+
vi.useFakeTimers()
9+
})
10+
11+
afterEach(() => {
12+
vi.useRealTimers()
13+
})
1114

12-
it('sync counter', async () => {
15+
it('sync counter', () => {
1316
let counter = 0
1417
const countAtom = atomWithRefresh(() => ++counter)
1518

@@ -29,22 +32,21 @@ it('sync counter', async () => {
2932
</StrictMode>,
3033
)
3134

32-
expect(await screen.findByText('count: 1')).toBeInTheDocument()
35+
expect(screen.getByText('count: 1')).toBeInTheDocument()
3336

34-
await userEvent.click(screen.getByText('button'))
35-
expect(await screen.findByText('count: 2')).toBeInTheDocument()
37+
fireEvent.click(screen.getByText('button'))
38+
expect(screen.getByText('count: 2')).toBeInTheDocument()
3639

37-
await userEvent.click(screen.getByText('button'))
38-
expect(await screen.findByText('count: 3')).toBeInTheDocument()
40+
fireEvent.click(screen.getByText('button'))
41+
expect(screen.getByText('count: 3')).toBeInTheDocument()
3942

4043
expect(counter).toBe(3)
4144
})
4245

4346
it('async counter', async () => {
44-
let resolve = () => {}
4547
let counter = 0
4648
const countAtom = atomWithRefresh(async () => {
47-
await new Promise<void>((r) => (resolve = r))
49+
await new Promise<void>((resolve) => setTimeout(resolve, 100))
4850
return ++counter
4951
})
5052

@@ -58,33 +60,34 @@ it('async counter', async () => {
5860
)
5961
}
6062

61-
await act(async () => {
63+
await act(() =>
6264
render(
6365
<StrictMode>
6466
<Suspense fallback="loading">
6567
<Counter />
6668
</Suspense>
6769
</StrictMode>,
68-
)
69-
})
70+
),
71+
)
7072

71-
expect(await screen.findByText('loading')).toBeInTheDocument()
72-
resolve()
73-
expect(await screen.findByText('count: 1')).toBeInTheDocument()
73+
expect(screen.getByText('loading')).toBeInTheDocument()
74+
await act(() => vi.advanceTimersByTimeAsync(100))
75+
expect(screen.getByText('count: 1')).toBeInTheDocument()
7476

75-
await userEvent.click(screen.getByText('button'))
76-
expect(await screen.findByText('loading')).toBeInTheDocument()
77-
resolve()
78-
expect(await screen.findByText('count: 2')).toBeInTheDocument()
77+
await act(() => fireEvent.click(screen.getByText('button')))
78+
expect(screen.getByText('loading')).toBeInTheDocument()
79+
await act(() => vi.advanceTimersByTimeAsync(100))
80+
expect(screen.getByText('count: 2')).toBeInTheDocument()
7981

80-
await userEvent.click(screen.getByText('button'))
81-
resolve()
82-
expect(await screen.findByText('count: 3')).toBeInTheDocument()
82+
await act(() => fireEvent.click(screen.getByText('button')))
83+
expect(screen.getByText('loading')).toBeInTheDocument()
84+
await act(() => vi.advanceTimersByTimeAsync(100))
85+
expect(screen.getByText('count: 3')).toBeInTheDocument()
8386

8487
expect(counter).toBe(3)
8588
})
8689

87-
it('writable counter', async () => {
90+
it('writable counter', () => {
8891
let counter = 0
8992
const countAtom = atomWithRefresh(
9093
() => ++counter,
@@ -110,17 +113,17 @@ it('writable counter', async () => {
110113
</StrictMode>,
111114
)
112115

113-
expect(await screen.findByText('count: 1')).toBeInTheDocument()
116+
expect(screen.getByText('count: 1')).toBeInTheDocument()
114117

115-
await userEvent.click(screen.getByText('button'))
116-
expect(await screen.findByText('count: 2')).toBeInTheDocument()
118+
fireEvent.click(screen.getByText('button'))
119+
expect(screen.getByText('count: 2')).toBeInTheDocument()
117120

118-
await userEvent.click(screen.getByText('button'))
119-
expect(await screen.findByText('count: 3')).toBeInTheDocument()
121+
fireEvent.click(screen.getByText('button'))
122+
expect(screen.getByText('count: 3')).toBeInTheDocument()
120123

121-
await userEvent.click(screen.getByText('set9'))
122-
expect(await screen.findByText('count: 3')).toBeInTheDocument()
124+
fireEvent.click(screen.getByText('set9'))
125+
expect(screen.getByText('count: 3')).toBeInTheDocument()
123126

124-
await userEvent.click(screen.getByText('button'))
125-
expect(await screen.findByText('count: 10')).toBeInTheDocument()
127+
fireEvent.click(screen.getByText('button'))
128+
expect(screen.getByText('count: 10')).toBeInTheDocument()
126129
})

0 commit comments

Comments
 (0)