@reduxjs/toolkit
Version:
The official, opinionated, batteries-included toolset for efficient Redux development
80 lines (71 loc) • 2.04 kB
text/typescript
import { createSlice } from '@reduxjs/toolkit'
import { createApi } from '@reduxjs/toolkit/query'
import { setupApiStore } from './helpers'
const baseQuery = (args?: any) => ({ data: args })
const api = createApi({
baseQuery,
endpoints: (build) => ({
getUser: build.query<unknown, number>({
query(id) {
return { url: `user/${id}` }
},
}),
}),
})
const { getUser } = api.endpoints
const authSlice = createSlice({
name: 'auth',
initialState: {
token: '1234',
},
reducers: {
setToken(state, action) {
state.token = action.payload
},
},
})
const storeRef = setupApiStore(api, { auth: authSlice.reducer })
it('only resets the api state when resetApiState is dispatched', async () => {
storeRef.store.dispatch({ type: 'unrelated' }) // trigger "registered middleware" into place
const initialState = storeRef.store.getState()
await storeRef.store.dispatch(
getUser.initiate(1, { subscriptionOptions: { pollingInterval: 10 } })
)
expect(storeRef.store.getState()).toEqual({
api: {
config: {
focused: true,
keepUnusedDataFor: 60,
middlewareRegistered: true,
online: true,
reducerPath: 'api',
refetchOnFocus: false,
refetchOnMountOrArgChange: false,
refetchOnReconnect: false,
},
mutations: {},
provided: {},
queries: {
'getUser(1)': {
data: {
url: 'user/1',
},
endpointName: 'getUser',
fulfilledTimeStamp: expect.any(Number),
originalArgs: 1,
requestId: expect.any(String),
startedTimeStamp: expect.any(Number),
status: 'fulfilled',
},
},
subscriptions: {
'getUser(1)': expect.any(Object),
},
},
auth: {
token: '1234',
},
})
storeRef.store.dispatch(api.util.resetApiState())
expect(storeRef.store.getState()).toEqual(initialState)
})