Skip to content

Commit f5ef360

Browse files
committed
Add a failing test for thunk dispatch typing
1 parent b6314ef commit f5ef360

File tree

1 file changed

+44
-19
lines changed

1 file changed

+44
-19
lines changed

packages/action-listener-middleware/src/tests/listenerMiddleware.test.ts

Lines changed: 44 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,20 @@ const noop = () => {}
2727
describe('createActionListenerMiddleware', () => {
2828
let store = configureStore({
2929
reducer: () => ({}),
30-
middleware: [createActionListenerMiddleware()] as const,
30+
middleware: (gDM) => gDM().prepend(createActionListenerMiddleware()),
3131
})
32+
33+
const counterSlice = createSlice({
34+
name: 'counter',
35+
initialState: 0,
36+
reducers: {
37+
increment(state) {
38+
return state + 1
39+
},
40+
},
41+
})
42+
const { increment } = counterSlice.actions
43+
3244
let reducer: jest.Mock
3345
let middleware: ReturnType<typeof createActionListenerMiddleware>
3446

@@ -44,7 +56,7 @@ describe('createActionListenerMiddleware', () => {
4456
reducer = jest.fn(() => ({}))
4557
store = configureStore({
4658
reducer,
47-
middleware: [middleware] as const,
59+
middleware: (gDM) => gDM().prepend(middleware),
4860
})
4961
})
5062

@@ -56,7 +68,7 @@ describe('createActionListenerMiddleware', () => {
5668
reducer = jest.fn(() => ({}))
5769
store = configureStore({
5870
reducer,
59-
middleware: [middleware] as const,
71+
middleware: (gDM) => gDM().prepend(middleware),
6072
})
6173

6274
let foundExtra = null
@@ -78,6 +90,32 @@ describe('createActionListenerMiddleware', () => {
7890
expect(resultAction).toBe(originalAction)
7991
})
8092

93+
test.skip('Allows dispatching a thunk without TS errors', () => {
94+
const store = configureStore({
95+
reducer: counterSlice.reducer,
96+
middleware: (gDM) => gDM().prepend(middleware),
97+
})
98+
store.dispatch(increment())
99+
100+
let testState = 0
101+
102+
middleware.addListener(
103+
(action, state) => {
104+
return increment.match(action) && state > 1
105+
},
106+
(action, listenerApi) => {
107+
// TODO Can't get the thunk dispatch types to carry through
108+
// listenerApi.dispatch((dispatch, getState) => {
109+
// testState = getState()
110+
// })
111+
}
112+
)
113+
114+
store.dispatch(increment())
115+
116+
expect(testState).toBe(2)
117+
})
118+
81119
test('directly subscribing', () => {
82120
const listener = jest.fn((_: TestAction1) => {})
83121

@@ -132,24 +170,11 @@ describe('createActionListenerMiddleware', () => {
132170
})
133171

134172
test('Can subscribe with an action predicate function', () => {
135-
const slice = createSlice({
136-
name: 'counter',
137-
initialState: 0,
138-
reducers: {
139-
increment(state) {
140-
return state + 1
141-
},
142-
},
143-
})
144-
const { increment } = slice.actions
145-
146-
store = configureStore({
147-
reducer: slice.reducer,
148-
middleware: [middleware] as const,
173+
const store = configureStore({
174+
reducer: counterSlice.reducer,
175+
middleware: (gDM) => gDM().prepend(middleware),
149176
})
150177

151-
const listener = jest.fn((_: TestAction1) => {})
152-
153178
let listenerCalls = 0
154179

155180
middleware.addListener(

0 commit comments

Comments
 (0)