From e108a347188cf629c0b8c6fd5ebfe18fa1ce39e9 Mon Sep 17 00:00:00 2001 From: Chung N Ho Date: Wed, 20 Jun 2018 18:13:30 -0700 Subject: [PATCH] [redux-mock-store] Update types to be compatible with redux 4.0 --- types/redux-mock-store/index.d.ts | 18 ++++++-- types/redux-mock-store/package.json | 2 +- .../redux-mock-store-tests.ts | 2 +- types/redux-mock-store/v0/index.d.ts | 18 ++++++++ types/redux-mock-store/v0/package.json | 6 +++ .../v0/redux-mock-store-tests.ts | 45 +++++++++++++++++++ types/redux-mock-store/v0/tsconfig.json | 29 ++++++++++++ types/redux-mock-store/v0/tslint.json | 8 ++++ 8 files changed, 122 insertions(+), 6 deletions(-) create mode 100644 types/redux-mock-store/v0/index.d.ts create mode 100644 types/redux-mock-store/v0/package.json create mode 100644 types/redux-mock-store/v0/redux-mock-store-tests.ts create mode 100644 types/redux-mock-store/v0/tsconfig.json create mode 100644 types/redux-mock-store/v0/tslint.json diff --git a/types/redux-mock-store/index.d.ts b/types/redux-mock-store/index.d.ts index 4f8114731a..5966b125a8 100644 --- a/types/redux-mock-store/index.d.ts +++ b/types/redux-mock-store/index.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Redux Mock Store 0.0.1 +// Type definitions for Redux Mock Store 1.0.0 // Project: https://github.com/arnaudbenard/redux-mock-store // Definitions by: Marian Palkus , Cap3 // Definitions: https://github.com/borisyankov/DefinitelyTyped @@ -6,13 +6,23 @@ import * as Redux from 'redux'; -export interface MockStore extends Redux.Store { +export interface MockStore extends Redux.Store { getActions(): any[]; clearActions(): void; } -export type MockStoreCreator = (state?: T) => MockStore; +export type MockStoreEnhanced = MockStore & {dispatch: DispatchExts}; -declare function createMockStore(middlewares?: Redux.Middleware[]): MockStoreCreator; +export type MockStoreCreator = (state?: S) => MockStoreEnhanced; + +/** + * Create Mock Store returns a function that will create a mock store from a state + * with the same set of set of middleware applied. + * + * @param middlewares The list of middleware to be applied. + * @template S The type of state to be held by the store. + * @template DispatchExts The additional Dispatch signatures for the middlewares applied. + */ +declare function createMockStore(middlewares?: Redux.Middleware[]): MockStoreCreator; export default createMockStore; diff --git a/types/redux-mock-store/package.json b/types/redux-mock-store/package.json index 6d68bf2f9b..7f5b19d45b 100644 --- a/types/redux-mock-store/package.json +++ b/types/redux-mock-store/package.json @@ -1,6 +1,6 @@ { "private": true, "dependencies": { - "redux": "^3.6.0" + "redux": "^4.0.0" } } diff --git a/types/redux-mock-store/redux-mock-store-tests.ts b/types/redux-mock-store/redux-mock-store-tests.ts index daa801b960..14ce18ecda 100644 --- a/types/redux-mock-store/redux-mock-store-tests.ts +++ b/types/redux-mock-store/redux-mock-store-tests.ts @@ -18,7 +18,7 @@ function counter(state: any, action: any) { } function loggingMiddleware() { - return (next: Redux.Dispatch) => (action: any) => { + return (next: Redux.Dispatch) => (action: any) => { console.log(action.type); return next(action); }; diff --git a/types/redux-mock-store/v0/index.d.ts b/types/redux-mock-store/v0/index.d.ts new file mode 100644 index 0000000000..4f8114731a --- /dev/null +++ b/types/redux-mock-store/v0/index.d.ts @@ -0,0 +1,18 @@ +// Type definitions for Redux Mock Store 0.0.1 +// Project: https://github.com/arnaudbenard/redux-mock-store +// Definitions by: Marian Palkus , Cap3 +// Definitions: https://github.com/borisyankov/DefinitelyTyped +// TypeScript Version: 2.3 + +import * as Redux from 'redux'; + +export interface MockStore extends Redux.Store { + getActions(): any[]; + clearActions(): void; +} + +export type MockStoreCreator = (state?: T) => MockStore; + +declare function createMockStore(middlewares?: Redux.Middleware[]): MockStoreCreator; + +export default createMockStore; diff --git a/types/redux-mock-store/v0/package.json b/types/redux-mock-store/v0/package.json new file mode 100644 index 0000000000..6d68bf2f9b --- /dev/null +++ b/types/redux-mock-store/v0/package.json @@ -0,0 +1,6 @@ +{ + "private": true, + "dependencies": { + "redux": "^3.6.0" + } +} diff --git a/types/redux-mock-store/v0/redux-mock-store-tests.ts b/types/redux-mock-store/v0/redux-mock-store-tests.ts new file mode 100644 index 0000000000..daa801b960 --- /dev/null +++ b/types/redux-mock-store/v0/redux-mock-store-tests.ts @@ -0,0 +1,45 @@ +import * as Redux from 'redux'; +import configureStore, { MockStore, MockStoreCreator } from 'redux-mock-store'; + +// Redux store API tests +// The following test are taken from ../redux/redux-tests.ts +function counter(state: any, action: any) { + if (!state) { + state = 0; + } + switch (action.type) { + case 'INCREMENT': + return state + 1; + case 'DECREMENT': + return state - 1; + default: + return state; + } +} + +function loggingMiddleware() { + return (next: Redux.Dispatch) => (action: any) => { + console.log(action.type); + return next(action); + }; +} + +const mockStoreCreator: MockStoreCreator = configureStore([loggingMiddleware]); +const initialState = 0; + +const store: MockStore = mockStoreCreator(initialState); + +store.subscribe(() => { + // ... +}); + +store.dispatch({ type: 'INCREMENT' }); + +// Additional mock store API tests +const actions: any[] = store.getActions(); + +store.clearActions(); + +// actions access without the need to cast +const actions2 = store.getActions(); +actions2[10].payload.id; diff --git a/types/redux-mock-store/v0/tsconfig.json b/types/redux-mock-store/v0/tsconfig.json new file mode 100644 index 0000000000..c463852c20 --- /dev/null +++ b/types/redux-mock-store/v0/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6", + "dom" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": false, + "strictFunctionTypes": true, + "baseUrl": "../../", + "typeRoots": [ + "../../" + ], + "types": [], + "paths": { + "redux-mock-store": [ + "redux-mock-store/v0" + ] + }, + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "redux-mock-store-tests.ts" + ] +} \ No newline at end of file diff --git a/types/redux-mock-store/v0/tslint.json b/types/redux-mock-store/v0/tslint.json new file mode 100644 index 0000000000..3337f86cdc --- /dev/null +++ b/types/redux-mock-store/v0/tslint.json @@ -0,0 +1,8 @@ +{ + "extends": "dtslint/dt.json", + "rules": { + // TODO + "dt-header": false, + "no-unnecessary-generics": false + } +} \ No newline at end of file