diff --git a/packages/preact-query/src/__tests__/useMutation.test.tsx b/packages/preact-query/src/__tests__/useMutation.test.tsx index f060c496f08..9ff5a41c318 100644 --- a/packages/preact-query/src/__tests__/useMutation.test.tsx +++ b/packages/preact-query/src/__tests__/useMutation.test.tsx @@ -783,6 +783,83 @@ describe('useMutation', () => { consoleMock.mockRestore() }) + it('should not throw an error when throwOnError is set to false', async () => { + function Page() { + const { mutate, error } = useMutation({ + mutationFn: () => + sleep(10).then(() => { + throw new Error('Expected mock error') + }), + throwOnError: false, + }) + + return ( +
+ +
error: {error?.message ?? 'null'}
+
+ ) + } + + const rendered = renderWithClient(queryClient, ) + + fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) + await vi.advanceTimersByTimeAsync(11) + + expect(rendered.getByText('error: Expected mock error')).toBeInTheDocument() + }) + + it('should not throw an error when throwOnError is a function that returns false', async () => { + function Page() { + const { mutate, error } = useMutation({ + mutationFn: () => + sleep(10).then(() => { + throw new Error('Expected mock error') + }), + throwOnError: () => false, + }) + + return ( +
+ +
error: {error?.message ?? 'null'}
+
+ ) + } + + const rendered = renderWithClient(queryClient, ) + + fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) + await vi.advanceTimersByTimeAsync(11) + + expect(rendered.getByText('error: Expected mock error')).toBeInTheDocument() + }) + + it('should not throw an error when throwOnError is not set', async () => { + function Page() { + const { mutate, error } = useMutation({ + mutationFn: () => + sleep(10).then(() => { + throw new Error('Expected mock error') + }), + }) + + return ( +
+ +
error: {error?.message ?? 'null'}
+
+ ) + } + + const rendered = renderWithClient(queryClient, ) + + fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) + await vi.advanceTimersByTimeAsync(11) + + expect(rendered.getByText('error: Expected mock error')).toBeInTheDocument() + }) + it('should pass meta to mutation', async () => { const errorMock = vi.fn() const successMock = vi.fn() diff --git a/packages/react-query/src/__tests__/useMutation.test.tsx b/packages/react-query/src/__tests__/useMutation.test.tsx index 821a4571afb..d181df692c8 100644 --- a/packages/react-query/src/__tests__/useMutation.test.tsx +++ b/packages/react-query/src/__tests__/useMutation.test.tsx @@ -782,6 +782,83 @@ describe('useMutation', () => { consoleMock.mockRestore() }) + it('should not throw an error when throwOnError is set to false', async () => { + function Page() { + const { mutate, error } = useMutation({ + mutationFn: () => + sleep(10).then(() => { + throw new Error('Expected mock error') + }), + throwOnError: false, + }) + + return ( +
+ +
error: {error?.message ?? 'null'}
+
+ ) + } + + const rendered = renderWithClient(queryClient, ) + + fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) + await vi.advanceTimersByTimeAsync(11) + + expect(rendered.getByText('error: Expected mock error')).toBeInTheDocument() + }) + + it('should not throw an error when throwOnError is a function that returns false', async () => { + function Page() { + const { mutate, error } = useMutation({ + mutationFn: () => + sleep(10).then(() => { + throw new Error('Expected mock error') + }), + throwOnError: () => false, + }) + + return ( +
+ +
error: {error?.message ?? 'null'}
+
+ ) + } + + const rendered = renderWithClient(queryClient, ) + + fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) + await vi.advanceTimersByTimeAsync(11) + + expect(rendered.getByText('error: Expected mock error')).toBeInTheDocument() + }) + + it('should not throw an error when throwOnError is not set', async () => { + function Page() { + const { mutate, error } = useMutation({ + mutationFn: () => + sleep(10).then(() => { + throw new Error('Expected mock error') + }), + }) + + return ( +
+ +
error: {error?.message ?? 'null'}
+
+ ) + } + + const rendered = renderWithClient(queryClient, ) + + fireEvent.click(rendered.getByRole('button', { name: /mutate/i })) + await vi.advanceTimersByTimeAsync(11) + + expect(rendered.getByText('error: Expected mock error')).toBeInTheDocument() + }) + it('should pass meta to mutation', async () => { const errorMock = vi.fn() const successMock = vi.fn()