Skip to content

Commit c264cc0

Browse files
sukvvondai-shi
andauthored
test(basic): remove 'vi.waitFor', and add 'advanceTimersByTimeAsync' with 'act' (#1128)
Co-authored-by: Daishi Kato <dai-shi@users.noreply.github.com>
1 parent 961bcfa commit c264cc0

1 file changed

Lines changed: 69 additions & 119 deletions

File tree

tests/basic.test.tsx

Lines changed: 69 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { StrictMode, useEffect, useRef, useState } from 'react'
2-
import { fireEvent, render, screen } from '@testing-library/react'
2+
import { act, fireEvent, render, screen } from '@testing-library/react'
33
import { afterEach, beforeEach, expect, it, vi } from 'vitest'
44
import { proxy, snapshot, useSnapshot } from 'valtio'
55

@@ -38,14 +38,11 @@ it('simple counter', async () => {
3838
</StrictMode>,
3939
)
4040

41-
await vi.waitFor(async () =>
42-
expect(screen.getByText('count: 0')).toBeInTheDocument(),
43-
)
41+
expect(screen.getByText('count: 0')).toBeInTheDocument()
4442

4543
fireEvent.click(screen.getByText('button'))
46-
await vi.waitFor(async () =>
47-
expect(screen.getByText('count: 1')).toBeInTheDocument(),
48-
)
44+
await act(() => vi.advanceTimersByTimeAsync(0))
45+
expect(screen.getByText('count: 1')).toBeInTheDocument()
4946
unmount()
5047
})
5148

@@ -83,22 +80,18 @@ it('no extra re-renders (commits)', async () => {
8380
</>,
8481
)
8582

86-
await vi.waitFor(() => {
87-
expect(screen.getByText('count: 0 (1)')).toBeInTheDocument()
88-
expect(screen.getByText('count2: 0 (1)')).toBeInTheDocument()
89-
})
83+
expect(screen.getByText('count: 0 (1)')).toBeInTheDocument()
84+
expect(screen.getByText('count2: 0 (1)')).toBeInTheDocument()
9085

9186
fireEvent.click(screen.getByText('button'))
92-
await vi.waitFor(() => {
93-
expect(screen.getByText('count: 1 (2)')).toBeInTheDocument()
94-
expect(screen.getByText('count2: 0 (1)')).toBeInTheDocument()
95-
})
87+
await act(() => vi.advanceTimersByTimeAsync(0))
88+
expect(screen.getByText('count: 1 (2)')).toBeInTheDocument()
89+
expect(screen.getByText('count2: 0 (1)')).toBeInTheDocument()
9690

9791
fireEvent.click(screen.getByText('button2'))
98-
await vi.waitFor(() => {
99-
expect(screen.getByText('count: 1 (2)')).toBeInTheDocument()
100-
expect(screen.getByText('count2: 1 (2)')).toBeInTheDocument()
101-
})
92+
await act(() => vi.advanceTimersByTimeAsync(0))
93+
expect(screen.getByText('count: 1 (2)')).toBeInTheDocument()
94+
expect(screen.getByText('count2: 1 (2)')).toBeInTheDocument()
10295
})
10396

10497
it('no extra re-renders (render func calls in non strict mode)', async () => {
@@ -135,50 +128,44 @@ it('no extra re-renders (render func calls in non strict mode)', async () => {
135128
</>,
136129
)
137130

138-
await vi.waitFor(() => {
139-
expect(screen.getByText('count: 0')).toBeInTheDocument()
140-
expect(screen.getByText('count2: 0')).toBeInTheDocument()
141-
})
131+
expect(screen.getByText('count: 0')).toBeInTheDocument()
132+
expect(screen.getByText('count2: 0')).toBeInTheDocument()
142133
expect(renderFn).toBeCalledTimes(1)
143134
expect(renderFn).lastCalledWith(0)
144135
expect(renderFn2).toBeCalledTimes(1)
145136
expect(renderFn2).lastCalledWith(0)
146137

147138
fireEvent.click(screen.getByText('button'))
148-
await vi.waitFor(() => {
149-
expect(screen.getByText('count: 1')).toBeInTheDocument()
150-
expect(screen.getByText('count2: 0')).toBeInTheDocument()
151-
})
139+
await act(() => vi.advanceTimersByTimeAsync(0))
140+
expect(screen.getByText('count: 1')).toBeInTheDocument()
141+
expect(screen.getByText('count2: 0')).toBeInTheDocument()
152142
expect(renderFn).toBeCalledTimes(2)
153143
expect(renderFn).lastCalledWith(1)
154144
expect(renderFn2).toBeCalledTimes(1)
155145
expect(renderFn2).lastCalledWith(0)
156146

157147
fireEvent.click(screen.getByText('button2'))
158-
await vi.waitFor(() => {
159-
expect(screen.getByText('count: 1')).toBeInTheDocument()
160-
expect(screen.getByText('count2: 1')).toBeInTheDocument()
161-
})
148+
await act(() => vi.advanceTimersByTimeAsync(0))
149+
expect(screen.getByText('count: 1')).toBeInTheDocument()
150+
expect(screen.getByText('count2: 1')).toBeInTheDocument()
162151
expect(renderFn).toBeCalledTimes(2)
163152
expect(renderFn).lastCalledWith(1)
164153
expect(renderFn2).toBeCalledTimes(2)
165154
expect(renderFn2).lastCalledWith(1)
166155

167156
fireEvent.click(screen.getByText('button2'))
168-
await vi.waitFor(() => {
169-
expect(screen.getByText('count: 1')).toBeInTheDocument()
170-
expect(screen.getByText('count2: 2')).toBeInTheDocument()
171-
})
157+
await act(() => vi.advanceTimersByTimeAsync(0))
158+
expect(screen.getByText('count: 1')).toBeInTheDocument()
159+
expect(screen.getByText('count2: 2')).toBeInTheDocument()
172160
expect(renderFn).toBeCalledTimes(2)
173161
expect(renderFn).lastCalledWith(1)
174162
expect(renderFn2).toBeCalledTimes(3)
175163
expect(renderFn2).lastCalledWith(2)
176164

177165
fireEvent.click(screen.getByText('button'))
178-
await vi.waitFor(() => {
179-
expect(screen.getByText('count: 2')).toBeInTheDocument()
180-
expect(screen.getByText('count2: 2')).toBeInTheDocument()
181-
})
166+
await act(() => vi.advanceTimersByTimeAsync(0))
167+
expect(screen.getByText('count: 2')).toBeInTheDocument()
168+
expect(screen.getByText('count2: 2')).toBeInTheDocument()
182169
expect(renderFn).toBeCalledTimes(3)
183170
expect(renderFn).lastCalledWith(2)
184171
expect(renderFn2).toBeCalledTimes(3)
@@ -204,14 +191,11 @@ it('object in object', async () => {
204191
</StrictMode>,
205192
)
206193

207-
await vi.waitFor(() =>
208-
expect(screen.getByText('count: 0')).toBeInTheDocument(),
209-
)
194+
expect(screen.getByText('count: 0')).toBeInTheDocument()
210195

211196
fireEvent.click(screen.getByText('button'))
212-
await vi.waitFor(() =>
213-
expect(screen.getByText('count: 1')).toBeInTheDocument(),
214-
)
197+
await act(() => vi.advanceTimersByTimeAsync(0))
198+
expect(screen.getByText('count: 1')).toBeInTheDocument()
215199
})
216200

217201
it('array in object', async () => {
@@ -235,14 +219,11 @@ it('array in object', async () => {
235219
</StrictMode>,
236220
)
237221

238-
await vi.waitFor(() =>
239-
expect(screen.getByText('counts: 0,1,2')).toBeInTheDocument(),
240-
)
222+
expect(screen.getByText('counts: 0,1,2')).toBeInTheDocument()
241223

242224
fireEvent.click(screen.getByText('button'))
243-
await vi.waitFor(() =>
244-
expect(screen.getByText('counts: 0,1,2,3')).toBeInTheDocument(),
245-
)
225+
await act(() => vi.advanceTimersByTimeAsync(0))
226+
expect(screen.getByText('counts: 0,1,2,3')).toBeInTheDocument()
246227
})
247228

248229
it('array pop and splice', async () => {
@@ -265,19 +246,15 @@ it('array pop and splice', async () => {
265246
</StrictMode>,
266247
)
267248

268-
await vi.waitFor(() =>
269-
expect(screen.getByText('counts: 0,1,2')).toBeInTheDocument(),
270-
)
249+
expect(screen.getByText('counts: 0,1,2')).toBeInTheDocument()
271250

272251
fireEvent.click(screen.getByText('button'))
273-
await vi.waitFor(() =>
274-
expect(screen.getByText('counts: 0,1')).toBeInTheDocument(),
275-
)
252+
await act(() => vi.advanceTimersByTimeAsync(0))
253+
expect(screen.getByText('counts: 0,1')).toBeInTheDocument()
276254

277255
fireEvent.click(screen.getByText('button2'))
278-
await vi.waitFor(() =>
279-
expect(screen.getByText('counts: 0,10,11,1')).toBeInTheDocument(),
280-
)
256+
await act(() => vi.advanceTimersByTimeAsync(0))
257+
expect(screen.getByText('counts: 0,10,11,1')).toBeInTheDocument()
281258
})
282259

283260
it('array length after direct assignment', async () => {
@@ -311,19 +288,15 @@ it('array length after direct assignment', async () => {
311288
</StrictMode>,
312289
)
313290

314-
await vi.waitFor(() =>
315-
expect(screen.getByText('counts: 0,1,2')).toBeInTheDocument(),
316-
)
291+
expect(screen.getByText('counts: 0,1,2')).toBeInTheDocument()
317292

318293
fireEvent.click(screen.getByText('increment'))
319-
await vi.waitFor(() =>
320-
expect(screen.getByText('counts: 0,1,2,3')).toBeInTheDocument(),
321-
)
294+
await act(() => vi.advanceTimersByTimeAsync(0))
295+
expect(screen.getByText('counts: 0,1,2,3')).toBeInTheDocument()
322296

323297
fireEvent.click(screen.getByText('jump'))
324-
await vi.waitFor(() =>
325-
expect(screen.getByText('counts: 0,1,2,3,,,,,,9')).toBeInTheDocument(),
326-
)
298+
await act(() => vi.advanceTimersByTimeAsync(0))
299+
expect(screen.getByText('counts: 0,1,2,3,,,,,,9')).toBeInTheDocument()
327300
})
328301

329302
it('deleting property', async () => {
@@ -345,14 +318,11 @@ it('deleting property', async () => {
345318
</StrictMode>,
346319
)
347320

348-
await vi.waitFor(() =>
349-
expect(screen.getByText('count: 1')).toBeInTheDocument(),
350-
)
321+
expect(screen.getByText('count: 1')).toBeInTheDocument()
351322

352323
fireEvent.click(screen.getByText('button'))
353-
await vi.waitFor(() =>
354-
expect(screen.getByText('count: none')).toBeInTheDocument(),
355-
)
324+
await act(() => vi.advanceTimersByTimeAsync(0))
325+
expect(screen.getByText('count: none')).toBeInTheDocument()
356326
})
357327

358328
it('circular object', async () => {
@@ -376,14 +346,11 @@ it('circular object', async () => {
376346
</StrictMode>,
377347
)
378348

379-
await vi.waitFor(() => {
380-
expect(screen.getByText('count: 0')).toBeInTheDocument()
381-
})
349+
expect(screen.getByText('count: 0')).toBeInTheDocument()
382350

383351
fireEvent.click(screen.getByText('button'))
384-
await vi.waitFor(() => {
385-
expect(screen.getByText('count: 1')).toBeInTheDocument()
386-
})
352+
await act(() => vi.advanceTimersByTimeAsync(0))
353+
expect(screen.getByText('count: 1')).toBeInTheDocument()
387354
})
388355

389356
it('circular object with non-proxy object (#375)', async () => {
@@ -402,9 +369,7 @@ it('circular object with non-proxy object (#375)', async () => {
402369
</StrictMode>,
403370
)
404371

405-
await vi.waitFor(() =>
406-
expect(screen.getByText('count: 1')).toBeInTheDocument(),
407-
)
372+
expect(screen.getByText('count: 1')).toBeInTheDocument()
408373
})
409374

410375
it('render from outside', async () => {
@@ -432,15 +397,12 @@ it('render from outside', async () => {
432397
</StrictMode>,
433398
)
434399

435-
await vi.waitFor(() =>
436-
expect(screen.getByText('anotherCount: 0')).toBeInTheDocument(),
437-
)
400+
expect(screen.getByText('anotherCount: 0')).toBeInTheDocument()
438401

439402
fireEvent.click(screen.getByText('button'))
440403
fireEvent.click(screen.getByText('toggle'))
441-
await vi.waitFor(() =>
442-
expect(screen.getByText('count: 1')).toBeInTheDocument(),
443-
)
404+
await act(() => vi.advanceTimersByTimeAsync(0))
405+
expect(screen.getByText('count: 1')).toBeInTheDocument()
444406
})
445407

446408
it('counter with sync option', async () => {
@@ -464,19 +426,15 @@ it('counter with sync option', async () => {
464426
</>,
465427
)
466428

467-
await vi.waitFor(() =>
468-
expect(screen.getByText('count: 0 (1)')).toBeInTheDocument(),
469-
)
429+
expect(screen.getByText('count: 0 (1)')).toBeInTheDocument()
470430

471431
fireEvent.click(screen.getByText('button'))
472-
await vi.waitFor(() =>
473-
expect(screen.getByText('count: 1 (2)')).toBeInTheDocument(),
474-
)
432+
await act(() => vi.advanceTimersByTimeAsync(0))
433+
expect(screen.getByText('count: 1 (2)')).toBeInTheDocument()
475434

476435
fireEvent.click(screen.getByText('button'))
477-
await vi.waitFor(() =>
478-
expect(screen.getByText('count: 2 (3)')).toBeInTheDocument(),
479-
)
436+
await act(() => vi.advanceTimersByTimeAsync(0))
437+
expect(screen.getByText('count: 2 (3)')).toBeInTheDocument()
480438
})
481439

482440
it('support undefined property (#439)', async () => {
@@ -495,9 +453,7 @@ it('support undefined property (#439)', async () => {
495453
</StrictMode>,
496454
)
497455

498-
await vi.waitFor(() =>
499-
expect(screen.getByText('has prop: true')).toBeInTheDocument(),
500-
)
456+
expect(screen.getByText('has prop: true')).toBeInTheDocument()
501457
})
502458

503459
it('sync snapshot between nested components (#460)', async () => {
@@ -534,20 +490,18 @@ it('sync snapshot between nested components (#460)', async () => {
534490
</StrictMode>,
535491
)
536492

537-
await vi.waitFor(() => {
538-
expect(screen.getByText('Parent: value1')).toBeInTheDocument()
539-
expect(screen.getByText('Child: value1')).toBeInTheDocument()
540-
})
493+
expect(screen.getByText('Parent: value1')).toBeInTheDocument()
494+
expect(screen.getByText('Child: value1')).toBeInTheDocument()
541495

542496
fireEvent.click(screen.getByText('button'))
543-
await vi.waitFor(() => {
544-
expect(screen.getByText('Parent: value2')).toBeInTheDocument()
545-
expect(screen.getByText('Child: value2')).toBeInTheDocument()
546-
})
497+
await act(() => vi.advanceTimersByTimeAsync(0))
498+
expect(screen.getByText('Parent: value2')).toBeInTheDocument()
499+
expect(screen.getByText('Child: value2')).toBeInTheDocument()
547500
})
548501

549502
it('respects property enumerability (#726)', async () => {
550503
const x = proxy(Object.defineProperty({ a: 1 }, 'b', { value: 2 }))
504+
551505
expect(Object.keys(snapshot(x))).toEqual(Object.keys(x))
552506
})
553507

@@ -571,20 +525,16 @@ it('stable snapshot object (#985)', async () => {
571525

572526
render(<TestComponent />)
573527

574-
await vi.waitFor(() =>
575-
expect(screen.getByText('count: 0')).toBeInTheDocument(),
576-
)
528+
expect(screen.getByText('count: 0')).toBeInTheDocument()
577529
expect(effectCount).toBe(1)
578530

579531
fireEvent.click(screen.getByText('button'))
580-
await vi.waitFor(() =>
581-
expect(screen.getByText('count: 1')).toBeInTheDocument(),
582-
)
532+
await act(() => vi.advanceTimersByTimeAsync(0))
533+
expect(screen.getByText('count: 1')).toBeInTheDocument()
583534
expect(effectCount).toBe(1)
584535

585536
fireEvent.click(screen.getByText('button'))
586-
await vi.waitFor(() =>
587-
expect(screen.getByText('count: 2')).toBeInTheDocument(),
588-
)
537+
await act(() => vi.advanceTimersByTimeAsync(0))
538+
expect(screen.getByText('count: 2')).toBeInTheDocument()
589539
expect(effectCount).toBe(1)
590540
})

0 commit comments

Comments
 (0)