Skip to content

Commit 9234874

Browse files
committed
add reset method, tests
1 parent a54323f commit 9234874

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

src/__tests__/useMutation-test.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import {
2+
cleanup,
3+
render,
4+
fireEvent,
5+
} from '@testing-library/react'
6+
import * as React from 'react'
7+
import { act } from 'react-dom/test-utils'
8+
9+
import { useMutation } from '../index'
10+
11+
describe('useMutation', () => {
12+
afterEach(cleanup)
13+
14+
it('should be able to reset `data`', async () => {
15+
function Page() {
16+
const [mutate, mutationResult] = useMutation(() => Promise.resolve('mutation'))
17+
18+
return (
19+
<div>
20+
<h1 data-testid="title">{mutationResult.data}</h1>
21+
<button onClick={mutationResult.reset}>reset</button>
22+
<button onClick={mutate}>mutate</button>
23+
</div>
24+
)
25+
}
26+
27+
const { getByTestId, getByText } = render(<Page />)
28+
29+
expect(getByTestId('title').textContent).toBe('')
30+
31+
await act(async () => {
32+
fireEvent.click(getByText('mutate'))
33+
})
34+
35+
expect(getByTestId('title').textContent).toBe('mutation')
36+
37+
await act(async () => {
38+
fireEvent.click(getByText('reset'))
39+
})
40+
41+
expect(getByTestId('title').textContent).toBe('')
42+
})
43+
})

src/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,9 @@ export function useMutation(
668668
[refetchQueriesOnFailure, refetchQueries]
669669
)
670670

671-
return [mutate, { data, isLoading, error }]
671+
const reset = React.useCallback(() => setData(null), [])
672+
673+
return [mutate, { data, isLoading, error, reset }]
672674
}
673675

674676
export function useIsFetching() {

0 commit comments

Comments
 (0)