From 2dd5dcc713c151273d942f371fb65a5f4622ced0 Mon Sep 17 00:00:00 2001 From: Sander Mets Date: Sat, 10 Feb 2018 15:40:16 +0200 Subject: [PATCH 1/4] refactoring store --- src/templates/App.test | 4 ---- src/templates/Navigator | 4 ++-- src/templates/reducer | 2 +- src/templates/reducer.test | 4 ++-- src/templates/sagas | 1 + src/templates/sagas.test | 1 + src/templates/store.test | 30 ++++++++++++++++++++++++++++++ 7 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 src/templates/store.test diff --git a/src/templates/App.test b/src/templates/App.test index 90a6c86..5a7fd6c 100644 --- a/src/templates/App.test +++ b/src/templates/App.test @@ -5,10 +5,6 @@ import App from '../App'; // ./node_modules/.bin/jest ./src/__tests__/App.test.js --env=jsdom describe('', () => { it('renders without crashing', () => { - window.fetch = () => ({ - ok: true, - json: () => ({ foo: 'bar' }), - }); const div = document.createElement('div'); ReactDOM.render(, div); }); diff --git a/src/templates/Navigator b/src/templates/Navigator index e535eb2..50d7716 100644 --- a/src/templates/Navigator +++ b/src/templates/Navigator @@ -3,11 +3,11 @@ import React from 'react'; import { ConnectedRouter } from 'react-router-redux'; import { BrowserRouter, Switch, Route } from 'react-router-dom'; -import { history } from './store'; +import { getHistory } from './store'; import '' from './containers/'''; const Navigator = () => ( - + '} /> diff --git a/src/templates/reducer b/src/templates/reducer index e9255b1..4586ed9 100644 --- a/src/templates/reducer +++ b/src/templates/reducer @@ -7,7 +7,7 @@ const initialState = { const ''Reducer = (state = initialState, action) => { switch (action.type) { case actionType.FETCH_DATA_SUCCESS: { - const data = action.payload.results; + const { data } = action.payload.results; return { ...state, data, diff --git a/src/templates/reducer.test b/src/templates/reducer.test index 6543bbb..90be72d 100644 --- a/src/templates/reducer.test +++ b/src/templates/reducer.test @@ -17,9 +17,9 @@ describe('<'' /> reducer', () => { }); it('should handle the fetchDataSuccess action correctly', () => { - const fixture = { foo: 'bar' }; + const fixture = { data: { foo: 'bar' } }; const expectedResult = { - data: fixture, + data: fixture.data, }; expect(''Reducer(state, { diff --git a/src/templates/sagas b/src/templates/sagas index 2c36dcb..3798085 100644 --- a/src/templates/sagas +++ b/src/templates/sagas @@ -1,4 +1,5 @@ import { put, call, takeEvery } from 'redux-saga/effects'; +import axios from 'axios'; import * as actionType from './actionTypes'; export function* fetchDataAsync() { diff --git a/src/templates/sagas.test b/src/templates/sagas.test index 56f4e8e..71bf2e9 100644 --- a/src/templates/sagas.test +++ b/src/templates/sagas.test @@ -1,4 +1,5 @@ import { call, put, takeEvery } from 'redux-saga/effects'; +import axios from 'axios'; import { fetchDataAsync, watch''Sagas } from '../sagas'; import * as actionType from '../actionTypes'; diff --git a/src/templates/store.test b/src/templates/store.test new file mode 100644 index 0000000..e5daf22 --- /dev/null +++ b/src/templates/store.test @@ -0,0 +1,30 @@ +import React from 'react'; +import ReactDOM from 'react-dom'; +import config from '../config'; +import configureStore, { getStore } from '../store'; + +// yarn test ./src/__tests__/store.test.js --coverage +describe('getStore', () => { + it('returns store', () => { + configureStore(); + const store = getStore(); + expect(typeof store.dispatch).toEqual('function'); + expect(typeof store.subscribe).toEqual('function'); + expect(typeof store.getState).toEqual('function'); + }); + + it('adds devToolsExtension to enhanchers if NODE_ENV is development', () => { + // process.env.NODE_ENV = 'development'; + // Object.defineProperty(window, 'devToolsExtension', { + // writable: true, + // value: jest.fn(), + // }); + // configureStore(); + // const devToolsExtension = jest.fn() + // window.devToolsExtension = devToolsExtension; + // getStore(); + + // expect(window.devToolsExtension).toHaveBeenCalled(); + // process.env.NODE_ENV = env; + }); +}); From efbef5e3dfdde71344bff3934454cddc583ec9b7 Mon Sep 17 00:00:00 2001 From: Sander Mets Date: Sat, 10 Feb 2018 15:48:39 +0200 Subject: [PATCH 2/4] store itself refactor --- src/templates/store | 72 ++++++++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 27 deletions(-) diff --git a/src/templates/store b/src/templates/store index 108c579..49a62f7 100644 --- a/src/templates/store +++ b/src/templates/store @@ -5,35 +5,53 @@ import createHistory from 'history/createBrowserHistory'; // eslint-disable-line import rootReducer from './rootReducer'; import rootSaga from './rootSaga'; -export const history = createHistory(); - -const initialState = {}; -const enhancers = []; -const sagaMiddleware = createSagaMiddleware(); -const middleware = [ - sagaMiddleware, - routerMiddleware(history), -]; - -if (process.env.NODE_ENV === 'development') { - const { devToolsExtension } = window; - if (typeof devToolsExtension === 'function') { - enhancers.push(devToolsExtension()); +export const storeElements = { + history: undefined, + store: undefined, +}; + +export default function configureStore() { + storeElements.history = createHistory(); + + const initialState = {}; + const enhancers = []; + const sagaMiddleware = createSagaMiddleware(); + const middleware = [ + sagaMiddleware, + routerMiddleware(history), + ]; + + if (process.env.NODE_ENV === 'development') { + const { devToolsExtension } = window; + if (typeof devToolsExtension === 'function') { + enhancers.push(devToolsExtension()); + } } -} -const composedEnhancers = compose( - applyMiddleware(...middleware), - ...enhancers, -); + const composedEnhancers = compose( + applyMiddleware(...middleware), + ...enhancers, + ); + + storeElements.store = createStore( + rootReducer(), + initialState, + composedEnhancers, + ); -const store = createStore( - rootReducer(), - initialState, - composedEnhancers, -); + sagaMiddleware.run(rootSaga); +} -sagaMiddleware.run(rootSaga); -export default function getStore() { - return store; +export function getStore() { + if(!storeElements.store) { + configureStore(); + } + return storeElements.store; +} + +export function getHistory() { + if(!storeElements.history) { + configureStore(); + } + return storeElements.history; } From 7f4b5cfa314e958c1179726903b96dbdc6a184a2 Mon Sep 17 00:00:00 2001 From: Sander Mets Date: Sat, 10 Feb 2018 15:57:49 +0200 Subject: [PATCH 3/4] bugfix for App and store --- src/templates/App | 2 +- src/templates/store | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/templates/App b/src/templates/App index 2811dbd..ddf5996 100644 --- a/src/templates/App +++ b/src/templates/App @@ -2,7 +2,7 @@ import React from 'react'; import { Provider } from 'react-redux'; import Navigator from './Navigator'; -import getStore from './store'; +import { getStore } from './store'; const App = () => ( diff --git a/src/templates/store b/src/templates/store index 49a62f7..c5e972e 100644 --- a/src/templates/store +++ b/src/templates/store @@ -18,7 +18,7 @@ export default function configureStore() { const sagaMiddleware = createSagaMiddleware(); const middleware = [ sagaMiddleware, - routerMiddleware(history), + routerMiddleware(storeElements.history), ]; if (process.env.NODE_ENV === 'development') { @@ -50,8 +50,5 @@ export function getStore() { } export function getHistory() { - if(!storeElements.history) { - configureStore(); - } return storeElements.history; } From b62b5f3cd0004c53de443c3bb09443b713286b53 Mon Sep 17 00:00:00 2001 From: Sander Mets Date: Sat, 10 Feb 2018 16:00:05 +0200 Subject: [PATCH 4/4] 1.2.1 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8abbde7..a45eca3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "cli-react-redux", - "version": "1.2.0", + "version": "1.2.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 8f20600..30f13bb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cli-react-redux", - "version": "1.2.0", + "version": "1.2.1", "description": "React Redux CLI", "main": "index.js", "scripts": {