Skip to content

Commit 9bd8b25

Browse files
authored
test({react,preact}-query/useMutation): add 'throwOnError' false case tests (#10485)
1 parent ffa4164 commit 9bd8b25

2 files changed

Lines changed: 154 additions & 0 deletions

File tree

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

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -783,6 +783,83 @@ describe('useMutation', () => {
783783
consoleMock.mockRestore()
784784
})
785785

786+
it('should not throw an error when throwOnError is set to false', async () => {
787+
function Page() {
788+
const { mutate, error } = useMutation<string, Error>({
789+
mutationFn: () =>
790+
sleep(10).then(() => {
791+
throw new Error('Expected mock error')
792+
}),
793+
throwOnError: false,
794+
})
795+
796+
return (
797+
<div>
798+
<button onClick={() => mutate()}>mutate</button>
799+
<div>error: {error?.message ?? 'null'}</div>
800+
</div>
801+
)
802+
}
803+
804+
const rendered = renderWithClient(queryClient, <Page />)
805+
806+
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
807+
await vi.advanceTimersByTimeAsync(11)
808+
809+
expect(rendered.getByText('error: Expected mock error')).toBeInTheDocument()
810+
})
811+
812+
it('should not throw an error when throwOnError is a function that returns false', async () => {
813+
function Page() {
814+
const { mutate, error } = useMutation<string, Error>({
815+
mutationFn: () =>
816+
sleep(10).then(() => {
817+
throw new Error('Expected mock error')
818+
}),
819+
throwOnError: () => false,
820+
})
821+
822+
return (
823+
<div>
824+
<button onClick={() => mutate()}>mutate</button>
825+
<div>error: {error?.message ?? 'null'}</div>
826+
</div>
827+
)
828+
}
829+
830+
const rendered = renderWithClient(queryClient, <Page />)
831+
832+
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
833+
await vi.advanceTimersByTimeAsync(11)
834+
835+
expect(rendered.getByText('error: Expected mock error')).toBeInTheDocument()
836+
})
837+
838+
it('should not throw an error when throwOnError is not set', async () => {
839+
function Page() {
840+
const { mutate, error } = useMutation<string, Error>({
841+
mutationFn: () =>
842+
sleep(10).then(() => {
843+
throw new Error('Expected mock error')
844+
}),
845+
})
846+
847+
return (
848+
<div>
849+
<button onClick={() => mutate()}>mutate</button>
850+
<div>error: {error?.message ?? 'null'}</div>
851+
</div>
852+
)
853+
}
854+
855+
const rendered = renderWithClient(queryClient, <Page />)
856+
857+
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
858+
await vi.advanceTimersByTimeAsync(11)
859+
860+
expect(rendered.getByText('error: Expected mock error')).toBeInTheDocument()
861+
})
862+
786863
it('should pass meta to mutation', async () => {
787864
const errorMock = vi.fn()
788865
const successMock = vi.fn()

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

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -782,6 +782,83 @@ describe('useMutation', () => {
782782
consoleMock.mockRestore()
783783
})
784784

785+
it('should not throw an error when throwOnError is set to false', async () => {
786+
function Page() {
787+
const { mutate, error } = useMutation<string, Error>({
788+
mutationFn: () =>
789+
sleep(10).then(() => {
790+
throw new Error('Expected mock error')
791+
}),
792+
throwOnError: false,
793+
})
794+
795+
return (
796+
<div>
797+
<button onClick={() => mutate()}>mutate</button>
798+
<div>error: {error?.message ?? 'null'}</div>
799+
</div>
800+
)
801+
}
802+
803+
const rendered = renderWithClient(queryClient, <Page />)
804+
805+
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
806+
await vi.advanceTimersByTimeAsync(11)
807+
808+
expect(rendered.getByText('error: Expected mock error')).toBeInTheDocument()
809+
})
810+
811+
it('should not throw an error when throwOnError is a function that returns false', async () => {
812+
function Page() {
813+
const { mutate, error } = useMutation<string, Error>({
814+
mutationFn: () =>
815+
sleep(10).then(() => {
816+
throw new Error('Expected mock error')
817+
}),
818+
throwOnError: () => false,
819+
})
820+
821+
return (
822+
<div>
823+
<button onClick={() => mutate()}>mutate</button>
824+
<div>error: {error?.message ?? 'null'}</div>
825+
</div>
826+
)
827+
}
828+
829+
const rendered = renderWithClient(queryClient, <Page />)
830+
831+
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
832+
await vi.advanceTimersByTimeAsync(11)
833+
834+
expect(rendered.getByText('error: Expected mock error')).toBeInTheDocument()
835+
})
836+
837+
it('should not throw an error when throwOnError is not set', async () => {
838+
function Page() {
839+
const { mutate, error } = useMutation<string, Error>({
840+
mutationFn: () =>
841+
sleep(10).then(() => {
842+
throw new Error('Expected mock error')
843+
}),
844+
})
845+
846+
return (
847+
<div>
848+
<button onClick={() => mutate()}>mutate</button>
849+
<div>error: {error?.message ?? 'null'}</div>
850+
</div>
851+
)
852+
}
853+
854+
const rendered = renderWithClient(queryClient, <Page />)
855+
856+
fireEvent.click(rendered.getByRole('button', { name: /mutate/i }))
857+
await vi.advanceTimersByTimeAsync(11)
858+
859+
expect(rendered.getByText('error: Expected mock error')).toBeInTheDocument()
860+
})
861+
785862
it('should pass meta to mutation', async () => {
786863
const errorMock = vi.fn()
787864
const successMock = vi.fn()

0 commit comments

Comments
 (0)