Skip to content

Commit 6ec6811

Browse files
committed
chore: add a test to ensure that callback on .mutate are only called for the last observer
1 parent 7ee784f commit 6ec6811

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

src/reactjs/tests/useMutation.test.tsx

+63
Original file line numberDiff line numberDiff line change
@@ -820,4 +820,67 @@ describe('useMutation', () => {
820820
expect(onSuccessMutate).toHaveBeenCalledTimes(0)
821821
expect(onSettledMutate).toHaveBeenCalledTimes(0)
822822
})
823+
824+
it('should call mutate callbacks only for the last observer', async () => {
825+
const onSuccess = jest.fn()
826+
const onSuccessMutate = jest.fn()
827+
const onSettled = jest.fn()
828+
const onSettledMutate = jest.fn()
829+
let count = 0
830+
831+
function Page() {
832+
const mutation = useMutation(
833+
async (_text: string) => {
834+
count++
835+
await sleep(10)
836+
return `result${count}`
837+
},
838+
{
839+
onSuccess,
840+
onSettled,
841+
}
842+
)
843+
844+
return (
845+
<div>
846+
<button
847+
onClick={() =>
848+
mutation.mutate('todo', {
849+
onSuccess: onSuccessMutate,
850+
onSettled: onSettledMutate,
851+
})
852+
}
853+
>
854+
mutate
855+
</button>
856+
<div>
857+
data: {mutation.data ?? 'null'}, status: {mutation.status}
858+
</div>
859+
</div>
860+
)
861+
}
862+
863+
const rendered = renderWithClient(queryClient, <Page />)
864+
865+
await rendered.findByText('data: null, status: idle')
866+
867+
rendered.getByRole('button', { name: /mutate/i }).click()
868+
rendered.getByRole('button', { name: /mutate/i }).click()
869+
870+
await rendered.findByText('data: result2, status: success')
871+
872+
expect(count).toBe(2)
873+
874+
expect(onSuccess).toHaveBeenCalledTimes(2)
875+
expect(onSettled).toHaveBeenCalledTimes(2)
876+
expect(onSuccessMutate).toHaveBeenCalledTimes(1)
877+
expect(onSuccessMutate).toHaveBeenCalledWith('result2', 'todo', undefined)
878+
expect(onSettledMutate).toHaveBeenCalledTimes(1)
879+
expect(onSettledMutate).toHaveBeenCalledWith(
880+
'result2',
881+
null,
882+
'todo',
883+
undefined
884+
)
885+
})
823886
})

0 commit comments

Comments
 (0)