Skip to content

Commit 4349e75

Browse files
authored
test(solid-query/useMutation): remove 'vi.waitFor', replace 'findByText' with 'getByText', and add 'advanceTimersByTimeAsync', 'expect' (#9409)
1 parent 390424b commit 4349e75

File tree

1 file changed

+73
-118
lines changed

1 file changed

+73
-118
lines changed

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

Lines changed: 73 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,10 @@ describe('useMutation', () => {
5454
expect(rendered.getByRole('heading').textContent).toBe('empty')
5555

5656
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
57-
58-
await vi.waitFor(() => {
59-
expect(rendered.getByRole('heading').textContent).toBe('mutation')
60-
})
57+
await vi.advanceTimersByTimeAsync(0)
58+
expect(rendered.getByRole('heading').textContent).toBe('mutation')
6159

6260
fireEvent.click(rendered.getByRole('button', { name: /reset/i }))
63-
64-
await vi.waitFor(() => {})
6561
expect(rendered.getByRole('heading').textContent).toBe('empty')
6662
})
6763

@@ -97,18 +93,13 @@ describe('useMutation', () => {
9793
expect(rendered.queryByRole('heading')).toBeNull()
9894

9995
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
100-
101-
await vi.waitFor(() => {
102-
expect(rendered.getByRole('heading').textContent).toBe(
103-
'Expected mock error. All is well!',
104-
)
105-
})
96+
await vi.advanceTimersByTimeAsync(0)
97+
expect(rendered.getByRole('heading').textContent).toBe(
98+
'Expected mock error. All is well!',
99+
)
106100

107101
fireEvent.click(rendered.getByRole('button', { name: /reset/i }))
108-
109-
await vi.waitFor(() => {
110-
expect(rendered.queryByRole('heading')).toBeNull()
111-
})
102+
expect(rendered.queryByRole('heading')).toBeNull()
112103

113104
consoleMock.mockRestore()
114105
})
@@ -155,22 +146,16 @@ describe('useMutation', () => {
155146
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
156147
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
157148
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
149+
await vi.advanceTimersByTimeAsync(0)
150+
expect(rendered.getByRole('heading').textContent).toBe('3')
158151

159-
await vi.waitFor(() => {
160-
expect(rendered.getByRole('heading').textContent).toBe('3')
161-
})
162-
163-
await vi.waitFor(() => {
164-
expect(onSuccessMock).toHaveBeenCalledTimes(3)
165-
})
152+
expect(onSuccessMock).toHaveBeenCalledTimes(3)
166153

167154
expect(onSuccessMock).toHaveBeenCalledWith(1)
168155
expect(onSuccessMock).toHaveBeenCalledWith(2)
169156
expect(onSuccessMock).toHaveBeenCalledWith(3)
170157

171-
await vi.waitFor(() => {
172-
expect(onSettledMock).toHaveBeenCalledTimes(3)
173-
})
158+
expect(onSettledMock).toHaveBeenCalledTimes(3)
174159

175160
expect(onSettledMock).toHaveBeenCalledWith(1)
176161
expect(onSettledMock).toHaveBeenCalledWith(2)
@@ -222,34 +207,21 @@ describe('useMutation', () => {
222207

223208
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
224209
expect(rendered.getByText('Data')).toBeInTheDocument()
225-
await vi.waitFor(() =>
226-
expect(rendered.getByText('Status error')).toBeInTheDocument(),
227-
)
228-
await vi.waitFor(() =>
229-
expect(rendered.getByText('Failed 1 times')).toBeInTheDocument(),
230-
)
231-
await vi.waitFor(() =>
232-
expect(
233-
rendered.getByText('Failed because Error test Jonas'),
234-
).toBeInTheDocument(),
235-
)
210+
await vi.advanceTimersByTimeAsync(0)
211+
expect(rendered.getByText('Status error')).toBeInTheDocument()
212+
expect(rendered.getByText('Failed 1 times')).toBeInTheDocument()
213+
expect(
214+
rendered.getByText('Failed because Error test Jonas'),
215+
).toBeInTheDocument()
236216

237217
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
238-
await vi.waitFor(() =>
239-
expect(rendered.getByText('Status pending')).toBeInTheDocument(),
240-
)
241-
await vi.waitFor(() =>
242-
expect(rendered.getByText('Status success')).toBeInTheDocument(),
243-
)
244-
await vi.waitFor(() =>
245-
expect(rendered.getByText('Data 2')).toBeInTheDocument(),
246-
)
247-
await vi.waitFor(() =>
248-
expect(rendered.getByText('Failed 0 times')).toBeInTheDocument(),
249-
)
250-
await vi.waitFor(() =>
251-
expect(rendered.getByText('Failed because null')).toBeInTheDocument(),
252-
)
218+
await vi.advanceTimersByTimeAsync(0)
219+
expect(rendered.getByText('Status pending')).toBeInTheDocument()
220+
await vi.advanceTimersByTimeAsync(10)
221+
expect(rendered.getByText('Status success')).toBeInTheDocument()
222+
expect(rendered.getByText('Data 2')).toBeInTheDocument()
223+
expect(rendered.getByText('Failed 0 times')).toBeInTheDocument()
224+
expect(rendered.getByText('Failed because null')).toBeInTheDocument()
253225
})
254226

255227
it('should be able to call `onError` and `onSettled` after each failed mutate', async () => {
@@ -300,14 +272,10 @@ describe('useMutation', () => {
300272
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
301273
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
302274
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
275+
await vi.advanceTimersByTimeAsync(0)
276+
expect(rendered.getByRole('heading').textContent).toBe('3')
303277

304-
await vi.waitFor(() => {
305-
expect(rendered.getByRole('heading').textContent).toBe('3')
306-
})
307-
308-
await vi.waitFor(() => {
309-
expect(onErrorMock).toHaveBeenCalledTimes(3)
310-
})
278+
expect(onErrorMock).toHaveBeenCalledTimes(3)
311279
expect(onErrorMock).toHaveBeenCalledWith(
312280
'Expected mock error. All is well! 1',
313281
)
@@ -318,9 +286,7 @@ describe('useMutation', () => {
318286
'Expected mock error. All is well! 3',
319287
)
320288

321-
await vi.waitFor(() => {
322-
expect(onSettledMock).toHaveBeenCalledTimes(3)
323-
})
289+
expect(onSettledMock).toHaveBeenCalledTimes(3)
324290
expect(onSettledMock).toHaveBeenCalledWith(
325291
'Expected mock error. All is well! 1',
326292
)
@@ -604,13 +570,17 @@ describe('useMutation', () => {
604570
</QueryClientProvider>
605571
))
606572

607-
await rendered.findByText('data: null, status: idle, isPaused: false')
573+
expect(
574+
rendered.getByText('data: null, status: idle, isPaused: false'),
575+
).toBeInTheDocument()
608576

609577
window.dispatchEvent(new Event('offline'))
610578

611579
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
612-
613-
await rendered.findByText('data: null, status: pending, isPaused: true')
580+
await vi.advanceTimersByTimeAsync(0)
581+
expect(
582+
rendered.getByText('data: null, status: pending, isPaused: true'),
583+
).toBeInTheDocument()
614584

615585
expect(onMutate).toHaveBeenCalledTimes(1)
616586
expect(onMutate).toHaveBeenCalledWith('todo')
@@ -619,7 +589,9 @@ describe('useMutation', () => {
619589
window.dispatchEvent(new Event('online'))
620590

621591
await vi.advanceTimersByTimeAsync(10)
622-
await rendered.findByText('data: 1, status: success, isPaused: false')
592+
expect(
593+
rendered.getByText('data: 1, status: success, isPaused: false'),
594+
).toBeInTheDocument()
623595

624596
expect(onMutate).toHaveBeenCalledTimes(1)
625597
expect(count).toBe(1)
@@ -660,11 +632,11 @@ describe('useMutation', () => {
660632
</QueryClientProvider>
661633
))
662634

663-
await rendered.findByText('data: null, status: idle, isPaused: false')
664-
635+
rendered.getByText('data: null, status: idle, isPaused: false')
665636
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
666-
667-
await rendered.findByText('data: null, status: pending, isPaused: true')
637+
expect(
638+
rendered.getByText('data: null, status: pending, isPaused: true'),
639+
).toBeInTheDocument()
668640

669641
// no intermediate 'pending, false' state is expected because we don't start mutating!
670642
expect(states[0]).toBe('idle, false')
@@ -674,7 +646,9 @@ describe('useMutation', () => {
674646
window.dispatchEvent(new Event('online'))
675647

676648
await vi.advanceTimersByTimeAsync(10)
677-
await rendered.findByText('data: 1, status: success, isPaused: false')
649+
expect(
650+
rendered.getByText('data: 1, status: success, isPaused: false'),
651+
).toBeInTheDocument()
678652

679653
onlineMock.mockRestore()
680654
})
@@ -831,10 +805,8 @@ describe('useMutation', () => {
831805
))
832806

833807
fireEvent.click(rendered.getByText('mutate'))
834-
835-
await vi.waitFor(() => {
836-
expect(rendered.queryByText('error')).not.toBeNull()
837-
})
808+
await vi.advanceTimersByTimeAsync(0)
809+
expect(rendered.queryByText('error')).not.toBeNull()
838810

839811
consoleMock.mockRestore()
840812
})
@@ -882,15 +854,13 @@ describe('useMutation', () => {
882854

883855
// first error goes to component
884856
fireEvent.click(rendered.getByText('mutate'))
885-
await vi.waitFor(() => {
886-
expect(rendered.queryByText('mock error')).not.toBeNull()
887-
})
857+
await vi.advanceTimersByTimeAsync(0)
858+
expect(rendered.queryByText('mock error')).not.toBeNull()
888859

889860
// second error goes to boundary
890861
fireEvent.click(rendered.getByText('mutate'))
891-
await vi.waitFor(() => {
892-
expect(rendered.queryByText('error boundary')).not.toBeNull()
893-
})
862+
await vi.advanceTimersByTimeAsync(0)
863+
expect(rendered.queryByText('error boundary')).not.toBeNull()
894864

895865
consoleMock.mockRestore()
896866
})
@@ -943,14 +913,13 @@ describe('useMutation', () => {
943913

944914
fireEvent.click(rendered.getByText('succeed'))
945915
fireEvent.click(rendered.getByText('error'))
946-
947-
await vi.waitFor(() => {
948-
expect(rendered.queryByText('successTest')).not.toBeNull()
949-
expect(rendered.queryByText('errorTest')).not.toBeNull()
950-
})
916+
await vi.advanceTimersByTimeAsync(0)
917+
expect(rendered.queryByText('successTest')).not.toBeNull()
918+
expect(rendered.queryByText('errorTest')).not.toBeNull()
951919

952920
expect(successMock).toHaveBeenCalledTimes(1)
953921
expect(successMock).toHaveBeenCalledWith(metaSuccessMessage)
922+
954923
expect(errorMock).toHaveBeenCalledTimes(1)
955924
expect(errorMock).toHaveBeenCalledWith(metaErrorMessage)
956925
})
@@ -1016,13 +985,10 @@ describe('useMutation', () => {
1016985

1017986
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
1018987
fireEvent.click(rendered.getByRole('button', { name: /hide/i }))
1019-
1020-
await vi.waitFor(() => {
1021-
expect(
1022-
queryClient.getMutationCache().findAll({ mutationKey: mutationKey }),
1023-
).toHaveLength(0)
1024-
})
1025-
988+
await vi.advanceTimersByTimeAsync(10)
989+
expect(
990+
queryClient.getMutationCache().findAll({ mutationKey: mutationKey }),
991+
).toHaveLength(0)
1026992
expect(count).toBe(1)
1027993

1028994
expect(onSuccess).toHaveBeenCalledTimes(1)
@@ -1166,20 +1132,14 @@ describe('useMutation', () => {
11661132
</QueryClientProvider>
11671133
))
11681134

1169-
await vi.waitFor(() =>
1170-
expect(
1171-
rendered.getByText('error: null, status: idle'),
1172-
).toBeInTheDocument(),
1173-
)
1135+
await vi.advanceTimersByTimeAsync(10)
1136+
expect(rendered.getByText('error: null, status: idle')).toBeInTheDocument()
11741137

11751138
rendered.getByRole('button', { name: /mutate/i }).click()
1176-
11771139
await vi.advanceTimersByTimeAsync(10)
1178-
await vi.waitFor(() =>
1179-
expect(
1180-
rendered.getByText('error: mutateFnError, status: error'),
1181-
).toBeInTheDocument(),
1182-
)
1140+
expect(
1141+
rendered.getByText('error: mutateFnError, status: error'),
1142+
).toBeInTheDocument()
11831143
})
11841144

11851145
it('should go to error state if onSettled callback errors', async () => {
@@ -1215,12 +1175,13 @@ describe('useMutation', () => {
12151175
</QueryClientProvider>
12161176
))
12171177

1218-
await rendered.findByText('error: null, status: idle')
1178+
expect(rendered.getByText('error: null, status: idle')).toBeInTheDocument()
12191179

12201180
rendered.getByRole('button', { name: /mutate/i }).click()
1221-
12221181
await vi.advanceTimersByTimeAsync(10)
1223-
await rendered.findByText('error: mutateFnError, status: error')
1182+
expect(
1183+
rendered.getByText('error: mutateFnError, status: error'),
1184+
).toBeInTheDocument()
12241185

12251186
expect(onError).toHaveBeenCalledWith(mutateFnError, 'todo', undefined)
12261187
})
@@ -1250,18 +1211,12 @@ describe('useMutation', () => {
12501211

12511212
const rendered = render(() => <Page></Page>)
12521213

1253-
await vi.waitFor(() =>
1254-
expect(
1255-
rendered.getByText('data: null, status: idle'),
1256-
).toBeInTheDocument(),
1257-
)
1214+
expect(rendered.getByText('data: null, status: idle')).toBeInTheDocument()
12581215

12591216
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
1260-
1261-
await vi.waitFor(() =>
1262-
expect(
1263-
rendered.getByText('data: custom client, status: success'),
1264-
).toBeInTheDocument(),
1265-
)
1217+
await vi.advanceTimersByTimeAsync(0)
1218+
expect(
1219+
rendered.getByText('data: custom client, status: success'),
1220+
).toBeInTheDocument()
12661221
})
12671222
})

0 commit comments

Comments
 (0)