source: node_modules/@reduxjs/toolkit/src/tests/createReducer.test-d.ts@ a762898

Last change on this file since a762898 was a762898, checked in by istevanoska <ilinastevanoska@…>, 5 months ago

Added visualizations

  • Property mode set to 100644
File size: 2.2 KB
Line 
1import type { ActionReducerMapBuilder, Reducer } from '@reduxjs/toolkit'
2import { createAction, createReducer } from '@reduxjs/toolkit'
3
4describe('type tests', () => {
5 test('createReducer() infers type of returned reducer.', () => {
6 const incrementHandler = (
7 state: number,
8 action: { type: 'increment'; payload: number },
9 ) => state + 1
10
11 const decrementHandler = (
12 state: number,
13 action: { type: 'decrement'; payload: number },
14 ) => state - 1
15
16 const reducer = createReducer(0 as number, (builder) => {
17 builder
18 .addCase('increment', incrementHandler)
19 .addCase('decrement', decrementHandler)
20 })
21
22 expectTypeOf(reducer).toMatchTypeOf<Reducer<number>>()
23
24 expectTypeOf(reducer).not.toMatchTypeOf<Reducer<string>>()
25 })
26
27 test('createReducer() state type can be specified explicitly.', () => {
28 const incrementHandler = (
29 state: number,
30 action: { type: 'increment'; payload: number },
31 ) => state + action.payload
32
33 const decrementHandler = (
34 state: number,
35 action: { type: 'decrement'; payload: number },
36 ) => state - action.payload
37
38 createReducer(0 as number, (builder) => {
39 builder
40 .addCase('increment', incrementHandler)
41 .addCase('decrement', decrementHandler)
42 })
43
44 // @ts-expect-error
45 createReducer<string>(0 as number, (builder) => {
46 expectTypeOf(builder.addCase)
47 .parameter(1)
48 .not.toMatchTypeOf(incrementHandler)
49
50 expectTypeOf(builder.addCase)
51 .parameter(1)
52 .not.toMatchTypeOf(decrementHandler)
53 })
54 })
55
56 test('createReducer() ensures state type is mutable within a case reducer.', () => {
57 const initialState: { readonly counter: number } = { counter: 0 }
58
59 createReducer(initialState, (builder) => {
60 builder.addCase('increment', (state) => {
61 state.counter += 1
62 })
63 })
64 })
65
66 test('builder callback for actionMap', () => {
67 const increment = createAction<number, 'increment'>('increment')
68
69 const reducer = createReducer(0, (builder) =>
70 expectTypeOf(builder).toEqualTypeOf<ActionReducerMapBuilder<number>>(),
71 )
72
73 expectTypeOf(reducer(0, increment(5))).toBeNumber()
74
75 expectTypeOf(reducer(0, increment(5))).not.toBeString()
76 })
77})
Note: See TracBrowser for help on using the repository browser.