diff --git a/src/combineReducers.js b/src/combineReducers.js index ad2d48439e..cce386f5d8 100644 --- a/src/combineReducers.js +++ b/src/combineReducers.js @@ -95,6 +95,13 @@ export default function combineReducers(reducers) { var finalReducers = {} for (var i = 0; i < reducerKeys.length; i++) { var key = reducerKeys[i] + + if (process.env.NODE_ENV !== 'production') { + if (typeof reducers[key] === 'undefined') { + warning(`No reducer provided for key "${key}"`) + } + } + if (typeof reducers[key] === 'function') { finalReducers[key] = reducers[key] } diff --git a/test/combineReducers.spec.js b/test/combineReducers.spec.js index d861ba371f..defc1f7635 100644 --- a/test/combineReducers.spec.js +++ b/test/combineReducers.spec.js @@ -31,6 +31,24 @@ describe('Utils', () => { ).toEqual([ 'stack' ]) }) + it('warns if a reducer prop is undefined', () => { + const spy = expect.spyOn(console, 'error') + + let isNotDefined + combineReducers({ isNotDefined }) + expect(spy.calls[0].arguments[0]).toMatch( + /No reducer provided for key "isNotDefined"/ + ) + + spy.reset() + combineReducers({ thing: undefined }) + expect(spy.calls[0].arguments[0]).toMatch( + /No reducer provided for key "thing"/ + ) + + spy.restore() + }) + it('throws an error if a reducer returns undefined handling an action', () => { const reducer = combineReducers({ counter(state = 0, action) {