53 lines
1.5 KiB
Plaintext
53 lines
1.5 KiB
Plaintext
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
|
|
import { useState } from 'react'
|
|
|
|
const mockSuccessResponse = { value: 'success' }
|
|
|
|
const api = createApi({
|
|
baseQuery: fetchBaseQuery({ baseUrl: 'https://example.com' }),
|
|
endpoints: (build) => ({
|
|
update: build.mutation<typeof mockSuccessResponse, any>({
|
|
query: () => ({ url: 'success' }),
|
|
}),
|
|
failedUpdate: build.mutation<typeof mockSuccessResponse, any>({
|
|
query: () => ({ url: 'error' }),
|
|
}),
|
|
}),
|
|
})
|
|
|
|
describe('type tests', () => {
|
|
test('a mutation is unwrappable and has the correct types', () => {
|
|
function User() {
|
|
const [manualError, setManualError] = useState<any>()
|
|
|
|
const [update, { isLoading, data, error }] =
|
|
api.endpoints.update.useMutation()
|
|
|
|
return (
|
|
<div>
|
|
<div data-testid="isLoading">{String(isLoading)}</div>
|
|
<div data-testid="data">{JSON.stringify(data)}</div>
|
|
<div data-testid="error">{JSON.stringify(error)}</div>
|
|
<div data-testid="manuallySetError">
|
|
{JSON.stringify(manualError)}
|
|
</div>
|
|
<button
|
|
onClick={() => {
|
|
update({ name: 'hello' })
|
|
.unwrap()
|
|
.then((result) => {
|
|
expectTypeOf(result).toEqualTypeOf(mockSuccessResponse)
|
|
|
|
setManualError(undefined)
|
|
})
|
|
.catch(setManualError)
|
|
}}
|
|
>
|
|
Update User
|
|
</button>
|
|
</div>
|
|
)
|
|
}
|
|
})
|
|
})
|