From a3def7c6ba21defab4e2b641d3be50673c01c23a Mon Sep 17 00:00:00 2001 From: Wonsuk Choi Date: Tue, 14 Apr 2026 01:36:43 +0900 Subject: [PATCH] test({react,preact}-query/useMutation): add 'throwOnError' false case tests --- .../src/__tests__/useMutation.test.tsx | 77 +++++++++++++++++++ .../src/__tests__/useMutation.test.tsx | 77 +++++++++++++++++++ 2 files changed, 154 insertions(+) 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()