@reduxjs/toolkit
Version:
The official, opinionated, batteries-included toolset for efficient Redux development
144 lines (96 loc) • 3.85 kB
text/typescript
import type { StoreEnhancer } from '@reduxjs/toolkit'
import { configureStore } from '@reduxjs/toolkit'
declare const enhancer1: StoreEnhancer<
{
has1: true
},
{ stateHas1: true }
>
declare const enhancer2: StoreEnhancer<
{
has2: true
},
{ stateHas2: true }
>
describe('type tests', () => {
test('prepend single element', () => {
const store = configureStore({
reducer: () => 0,
enhancers: (gDE) => gDE().prepend(enhancer1),
})
expectTypeOf(store.has1).toEqualTypeOf<true>()
expectTypeOf(store.getState().stateHas1).toEqualTypeOf<true>()
expectTypeOf(store).not.toHaveProperty('has2')
expectTypeOf(store.getState()).not.toHaveProperty('stateHas2')
})
test('prepend multiple (rest)', () => {
const store = configureStore({
reducer: () => 0,
enhancers: (gDE) => gDE().prepend(enhancer1, enhancer2),
})
expectTypeOf(store.has1).toEqualTypeOf<true>()
expectTypeOf(store.getState().stateHas1).toEqualTypeOf<true>()
expectTypeOf(store.has2).toEqualTypeOf<true>()
expectTypeOf(store.getState().stateHas2).toEqualTypeOf<true>()
expectTypeOf(store).not.toHaveProperty('has3')
expectTypeOf(store.getState()).not.toHaveProperty('stateHas3')
})
test('prepend multiple (array notation)', () => {
const store = configureStore({
reducer: () => 0,
enhancers: (gDE) => gDE().prepend([enhancer1, enhancer2] as const),
})
expectTypeOf(store.has1).toEqualTypeOf<true>()
expectTypeOf(store.getState().stateHas1).toEqualTypeOf<true>()
expectTypeOf(store.has2).toEqualTypeOf<true>()
expectTypeOf(store.getState().stateHas2).toEqualTypeOf<true>()
expectTypeOf(store).not.toHaveProperty('has3')
expectTypeOf(store.getState()).not.toHaveProperty('stateHas3')
})
test('concat single element', () => {
const store = configureStore({
reducer: () => 0,
enhancers: (gDE) => gDE().concat(enhancer1),
})
expectTypeOf(store.has1).toEqualTypeOf<true>()
expectTypeOf(store.getState().stateHas1).toEqualTypeOf<true>()
expectTypeOf(store).not.toHaveProperty('has2')
expectTypeOf(store.getState()).not.toHaveProperty('stateHas2')
})
test('prepend multiple (rest)', () => {
const store = configureStore({
reducer: () => 0,
enhancers: (gDE) => gDE().concat(enhancer1, enhancer2),
})
expectTypeOf(store.has1).toEqualTypeOf<true>()
expectTypeOf(store.getState().stateHas1).toEqualTypeOf<true>()
expectTypeOf(store.has2).toEqualTypeOf<true>()
expectTypeOf(store.getState().stateHas2).toEqualTypeOf<true>()
expectTypeOf(store).not.toHaveProperty('has3')
expectTypeOf(store.getState()).not.toHaveProperty('stateHas3')
})
test('concat multiple (array notation)', () => {
const store = configureStore({
reducer: () => 0,
enhancers: (gDE) => gDE().concat([enhancer1, enhancer2] as const),
})
expectTypeOf(store.has1).toEqualTypeOf<true>()
expectTypeOf(store.getState().stateHas1).toEqualTypeOf<true>()
expectTypeOf(store.has2).toEqualTypeOf<true>()
expectTypeOf(store.getState().stateHas2).toEqualTypeOf<true>()
expectTypeOf(store).not.toHaveProperty('has3')
expectTypeOf(store.getState()).not.toHaveProperty('stateHas3')
})
test('concat and prepend', () => {
const store = configureStore({
reducer: () => 0,
enhancers: (gDE) => gDE().concat(enhancer1).prepend(enhancer2),
})
expectTypeOf(store.has1).toEqualTypeOf<true>()
expectTypeOf(store.getState().stateHas1).toEqualTypeOf<true>()
expectTypeOf(store.has2).toEqualTypeOf<true>()
expectTypeOf(store.getState().stateHas2).toEqualTypeOf<true>()
expectTypeOf(store).not.toHaveProperty('has3')
expectTypeOf(store.getState()).not.toHaveProperty('stateHas3')
})
})