UNPKG

typedux

Version:

Slightly adjusted Redux (awesome by default) for TS

117 lines 4.31 kB
import "jest"; import { getLogger } from '@3fv/logger-proxy'; import { Bluebird as Promise } from "../util"; import { MockStateStr1 } from "./mocks/MockConstants"; import { MockActionFactory } from "./mocks/MockActionFactory"; import { configureMockStoreFactory } from "./mocks/MockStore"; import { MockLeafState } from "./mocks/MockLeafState"; import { INTERNAL_KEY } from "../constants"; const log = getLogger(__filename); // configureMockStoreFactory() // installMockGlobalStore() // // class MockLeafReducer implements ILeafReducer<MockLeafState,MockMessage> { // // leaf():string { // return MockKey; // } // // prepareState(o:any) { // return o // } // // // defaultState() { // return new MockLeafState() // } // } // Simple mock factory describe('Typedux', function () { jest.setTimeout(10000); let //reducer:RootReducer<any>, mockStoreFactory, leafReducer, store = null, actions, getInternalState = () => { if (!store) throw Error("store not set"); return store.getState()[INTERNAL_KEY]; }; beforeEach(() => { //[leafReducer] = ObservableStore.makeSimpleReducers({type: MockKey, str1: MockStateStr1} as State<typeof MockKey>)//new MockLeafReducer() // ROOT REDUCER //reducer = createMockRootReducer(ObservableStore.makeInternalReducer(),leafReducer) mockStoreFactory = configureMockStoreFactory([], [], [MockActionFactory]); // STORE store = mockStoreFactory(() => ({ [MockLeafState.Key]: new MockLeafState() })); // createMockStore( // getDefaultMockState(reducer), // reducer.makeGenericHandler(), // (data) => { // log.debug('on state change',data) // }) // INIT store.dispatch({ type: '@INIT' }); // ACTIONS actions = new MockActionFactory(store); }); it('Uses reducers on the action message', () => { let state = store.getState(); let mockState = actions.state; expect(mockState.str1).toBe(MockStateStr1); // Make an update const mockStr1Update = 'my own personal idaho'; actions.mockUpdate(mockStr1Update); // Ensure state is different expect(store.getState()).not.toBe(state); // Make sure the children changed too let mockStateAfter = actions.state; expect(mockState).not.toBe(mockStateAfter); expect(mockStr1Update).toBe(mockStateAfter.str1); }); it('Uses state reducers too', () => { let //state = store.getState(), mockState = actions.state; expect(mockState.str2).toBeUndefined(); const str2Update = 'my new str2'; actions.mockUpdateFromState(str2Update); let mockStateAfter = actions.state; expect(mockStateAfter.str2).toBe(str2Update); expect(mockStateAfter.str2).not.toBe(mockState.str2); }); it('PromisesAction', () => { const // FUNCTION TEST thunkPromise = actions.mockThunk().then((result) => { expect(result).toBe('mock'); return Promise .delay(1000).then(() => { const internalState = getInternalState(); // getGlobalStoreInternalState() expect(internalState.hasPendingActions).toBe(false); expect(internalState.totalActionCount).toBe(1); expect(internalState.pendingActionCount).toBe(0); }); }), // TRACKING TEST pendingPromise = Promise.delay(300).then(() => { expect(getInternalState().hasPendingActions).toBe(true); expect(getInternalState().pendingActionCount).toBe(1); }); return pendingPromise.then(() => thunkPromise); }); it('Promises action Exception', () => { return actions.mockThunkError() .then(() => { throw new Error(`Thunk should not resolve, - should reject`); }) .catch(err => { expect(err instanceof Error).toBe(true); return Promise.delay(1000).then(() => { const internalState = getInternalState(); expect(internalState.pendingActionCount).toBe(0); }); }); }); }); //# sourceMappingURL=TypeDux.spec.js.map