Spaces:
Sleeping
Sleeping
| import type { ActionCreatorInvariantMiddlewareOptions } from '@internal/actionCreatorInvariantMiddleware' | |
| import { getMessage } from '@internal/actionCreatorInvariantMiddleware' | |
| import { createActionCreatorInvariantMiddleware } from '@internal/actionCreatorInvariantMiddleware' | |
| import type { MiddlewareAPI } from '@reduxjs/toolkit' | |
| import { createAction } from '@reduxjs/toolkit' | |
| describe('createActionCreatorInvariantMiddleware', () => { | |
| const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}) | |
| afterEach(() => { | |
| consoleSpy.mockClear() | |
| }) | |
| afterAll(() => { | |
| consoleSpy.mockRestore() | |
| }) | |
| const dummyAction = createAction('aSlice/anAction') | |
| it('sends the action through the middleware chain', () => { | |
| const next = vi.fn() | |
| const dispatch = createActionCreatorInvariantMiddleware()( | |
| {} as MiddlewareAPI, | |
| )(next) | |
| dispatch({ type: 'SOME_ACTION' }) | |
| expect(next).toHaveBeenCalledWith({ | |
| type: 'SOME_ACTION', | |
| }) | |
| }) | |
| const makeActionTester = ( | |
| options?: ActionCreatorInvariantMiddlewareOptions, | |
| ) => | |
| createActionCreatorInvariantMiddleware(options)({} as MiddlewareAPI)( | |
| (action) => action, | |
| ) | |
| it('logs a warning to console if an action creator is mistakenly dispatched', () => { | |
| const testAction = makeActionTester() | |
| testAction(dummyAction()) | |
| expect(consoleSpy).not.toHaveBeenCalled() | |
| testAction(dummyAction) | |
| expect(consoleSpy).toHaveBeenLastCalledWith(getMessage(dummyAction.type)) | |
| }) | |
| it('allows passing a custom predicate', () => { | |
| let predicateCalled = false | |
| const testAction = makeActionTester({ | |
| isActionCreator(action): action is Function { | |
| predicateCalled = true | |
| return false | |
| }, | |
| }) | |
| testAction(dummyAction()) | |
| expect(predicateCalled).toBe(true) | |
| }) | |
| }) | |