diff --git a/src/createStore.js b/src/createStore.js index a1fec48ca6..9e253729f9 100644 --- a/src/createStore.js +++ b/src/createStore.js @@ -79,6 +79,10 @@ export default function createStore(reducer, initialState, enhancer) { * @returns {Function} A function to remove this change listener. */ function subscribe(listener) { + if (typeof listener !== 'function') { + throw new Error('Expected listener to be a function.') + } + listeners.push(listener) var isSubscribed = true diff --git a/test/createStore.spec.js b/test/createStore.spec.js index 1143ce5f94..d4c4b1af37 100644 --- a/test/createStore.spec.js +++ b/test/createStore.spec.js @@ -548,4 +548,24 @@ describe('createStore', () => { store.replaceReducer(() => {}) ).toNotThrow() }) + + it('throws if listener is not a function', () => { + const store = createStore(reducers.todos) + + expect(() => + store.subscribe() + ).toThrow() + + expect(() => + store.subscribe('') + ).toThrow() + + expect(() => + store.subscribe(null) + ).toThrow() + + expect(() => + store.subscribe(undefined) + ).toThrow() + }) })