Skip to content

Commit e2ce12c

Browse files
sukvvonmanudeli
andauthored
test(react-query/useMutation): use precise time in 'advanceTimersByTimeAsync', and add 'expect' using 'toBeInTheDocument' (#9458)
Co-authored-by: Jonghyeon Ko <[email protected]>
1 parent ed90d1a commit e2ce12c

File tree

1 file changed

+36
-18
lines changed

1 file changed

+36
-18
lines changed

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

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ describe('useMutation', () => {
396396

397397
renderWithClient(queryClient, <Page />)
398398

399-
await vi.advanceTimersByTimeAsync(30)
399+
await vi.advanceTimersByTimeAsync(21)
400400

401401
expect(states.length).toBe(3)
402402
expect(states[0]).toMatchObject({ data: undefined, isPending: false })
@@ -515,20 +515,26 @@ describe('useMutation', () => {
515515

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

518-
rendered.getByText('data: null, status: idle, isPaused: false')
518+
expect(
519+
rendered.getByText('data: null, status: idle, isPaused: false'),
520+
).toBeInTheDocument()
519521

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

522524
await vi.advanceTimersByTimeAsync(0)
523-
rendered.getByText('data: null, status: pending, isPaused: true')
525+
expect(
526+
rendered.getByText('data: null, status: pending, isPaused: true'),
527+
).toBeInTheDocument()
524528

525529
expect(onMutate).toHaveBeenCalledTimes(1)
526530
expect(onMutate).toHaveBeenCalledWith('todo')
527531

528532
onlineMock.mockReturnValue(true)
529533
queryClient.getMutationCache().resumePausedMutations()
530534
await vi.advanceTimersByTimeAsync(11)
531-
rendered.getByText('data: 1, status: success, isPaused: false')
535+
expect(
536+
rendered.getByText('data: 1, status: success, isPaused: false'),
537+
).toBeInTheDocument()
532538

533539
expect(onMutate).toHaveBeenCalledTimes(1)
534540
expect(count).toBe(1)
@@ -565,12 +571,16 @@ describe('useMutation', () => {
565571

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

568-
rendered.getByText('data: null, status: idle, isPaused: false')
574+
expect(
575+
rendered.getByText('data: null, status: idle, isPaused: false'),
576+
).toBeInTheDocument()
569577

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

572580
await vi.advanceTimersByTimeAsync(0)
573-
rendered.getByText('data: null, status: pending, isPaused: true')
581+
expect(
582+
rendered.getByText('data: null, status: pending, isPaused: true'),
583+
).toBeInTheDocument()
574584

575585
// no intermediate 'pending, false' state is expected because we don't start mutating!
576586
expect(states[0]).toBe('idle, false')
@@ -580,7 +590,9 @@ describe('useMutation', () => {
580590
queryClient.getMutationCache().resumePausedMutations()
581591

582592
await vi.advanceTimersByTimeAsync(11)
583-
rendered.getByText('data: 1, status: success, isPaused: false')
593+
expect(
594+
rendered.getByText('data: 1, status: success, isPaused: false'),
595+
).toBeInTheDocument()
584596

585597
onlineMock.mockRestore()
586598
})
@@ -618,10 +630,10 @@ describe('useMutation', () => {
618630

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

621-
rendered.getByText('status: idle')
633+
expect(rendered.getByText('status: idle')).toBeInTheDocument()
622634
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
623635
await vi.advanceTimersByTimeAsync(16)
624-
rendered.getByText('isPaused: true')
636+
expect(rendered.getByText('isPaused: true')).toBeInTheDocument()
625637

626638
expect(
627639
queryClient.getMutationCache().findAll({ mutationKey: key }).length,
@@ -639,7 +651,7 @@ describe('useMutation', () => {
639651
queryClient.getMutationCache().resumePausedMutations()
640652

641653
await vi.advanceTimersByTimeAsync(11)
642-
rendered.getByText('data: data2')
654+
expect(rendered.getByText('data: data2')).toBeInTheDocument()
643655

644656
expect(
645657
queryClient.getMutationCache().findAll({ mutationKey: key })[0]?.state,
@@ -882,11 +894,13 @@ describe('useMutation', () => {
882894

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

885-
rendered.getByText('data: null, status: idle, isPaused: false')
897+
expect(
898+
rendered.getByText('data: null, status: idle, isPaused: false'),
899+
).toBeInTheDocument()
886900
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
887901
fireEvent.click(rendered.getByRole('button', { name: /hide/i }))
888902

889-
await vi.advanceTimersByTimeAsync(11)
903+
await vi.advanceTimersByTimeAsync(10)
890904
expect(
891905
queryClient.getMutationCache().findAll({ mutationKey }),
892906
).toHaveLength(0)
@@ -949,13 +963,15 @@ describe('useMutation', () => {
949963

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

952-
rendered.getByText('data: null, status: idle')
966+
expect(rendered.getByText('data: null, status: idle')).toBeInTheDocument()
953967

954968
fireEvent.click(rendered.getByRole('button', { name: /mutate1/i }))
955969
fireEvent.click(rendered.getByRole('button', { name: /mutate2/i }))
956970

957971
await vi.advanceTimersByTimeAsync(11)
958-
rendered.getByText('data: result-todo2, status: success')
972+
expect(
973+
rendered.getByText('data: result-todo2, status: success'),
974+
).toBeInTheDocument()
959975

960976
expect(count).toBe(2)
961977

@@ -1012,12 +1028,12 @@ describe('useMutation', () => {
10121028

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

1015-
rendered.getByText('status: idle')
1031+
expect(rendered.getByText('status: idle')).toBeInTheDocument()
10161032

10171033
rendered.getByRole('button', { name: /mutate/i }).click()
10181034

10191035
await vi.advanceTimersByTimeAsync(11)
1020-
rendered.getByText('status: error')
1036+
expect(rendered.getByText('status: error')).toBeInTheDocument()
10211037

10221038
expect(onError).toHaveBeenCalledWith(error, 'todo', undefined)
10231039
})
@@ -1088,12 +1104,14 @@ describe('useMutation', () => {
10881104

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

1091-
rendered.getByText('error: null, status: idle')
1107+
expect(rendered.getByText('error: null, status: idle')).toBeInTheDocument()
10921108

10931109
rendered.getByRole('button', { name: /mutate/i }).click()
10941110

10951111
await vi.advanceTimersByTimeAsync(11)
1096-
rendered.getByText('error: mutateFnError, status: error')
1112+
expect(
1113+
rendered.getByText('error: mutateFnError, status: error'),
1114+
).toBeInTheDocument()
10971115
expect(onError).toHaveBeenCalledWith(mutateFnError, 'todo', undefined)
10981116
})
10991117

0 commit comments

Comments
 (0)