From d575747aa5984f593f26b209b0dc665bcb804932 Mon Sep 17 00:00:00 2001 From: Jamie Dixon Date: Sat, 30 Jan 2016 09:59:27 +0000 Subject: [PATCH 1/5] Added check to createStore.subscribe to ensure listener is a function --- src/createStore.js | 4 ++++ test/createStore.spec.js | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/src/createStore.js b/src/createStore.js index a1fec48ca6..66f9ee1bf2 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 the nextReducer to be a function.') + } + listeners.push(listener) var isSubscribed = true diff --git a/test/createStore.spec.js b/test/createStore.spec.js index 1143ce5f94..e98473f8ac 100644 --- a/test/createStore.spec.js +++ b/test/createStore.spec.js @@ -548,4 +548,12 @@ describe('createStore', () => { store.replaceReducer(() => {}) ).toNotThrow() }) + + it('throws if listener is not a function', () => { + const store = createStore(reducers.todos) + + expect(() => + store.subscribe() + ).toThrow(); + }) }) From 40fd771ae035dacb9c67c39e8a4faaa4b8560d21 Mon Sep 17 00:00:00 2001 From: Jamie Dixon Date: Sat, 30 Jan 2016 10:02:37 +0000 Subject: [PATCH 2/5] Replaced error message with correct arg name --- src/createStore.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/createStore.js b/src/createStore.js index 66f9ee1bf2..9e253729f9 100644 --- a/src/createStore.js +++ b/src/createStore.js @@ -80,7 +80,7 @@ export default function createStore(reducer, initialState, enhancer) { */ function subscribe(listener) { if (typeof listener !== 'function') { - throw new Error('Expected the nextReducer to be a function.') + throw new Error('Expected listener to be a function.') } listeners.push(listener) From 0c5181977c79424d730e8077fec67b40c2297a9f Mon Sep 17 00:00:00 2001 From: Jamie Dixon Date: Sat, 30 Jan 2016 10:11:40 +0000 Subject: [PATCH 3/5] Removed semi-colon from end of toThrow() --- test/createStore.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/createStore.spec.js b/test/createStore.spec.js index e98473f8ac..7a5f7d8b22 100644 --- a/test/createStore.spec.js +++ b/test/createStore.spec.js @@ -554,6 +554,6 @@ describe('createStore', () => { expect(() => store.subscribe() - ).toThrow(); + ).toThrow() }) }) From 5279a93f4cf83229f7febd1bacc045c36c26f76d Mon Sep 17 00:00:00 2001 From: Jamie Dixon Date: Sat, 30 Jan 2016 10:21:35 +0000 Subject: [PATCH 4/5] Added tests for more deta types passed to createStore.subscribe --- test/createStore.spec.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/createStore.spec.js b/test/createStore.spec.js index 7a5f7d8b22..fff419aa43 100644 --- a/test/createStore.spec.js +++ b/test/createStore.spec.js @@ -555,5 +555,18 @@ describe('createStore', () => { expect(() => store.subscribe() ).toThrow() + + expect(() => + store.subscribe('') + ).toThrow() + + expect(() => + store.subscribe(null) + ).toThrow() + + expect(() => + store.subscribe(undefined) + ).toThrow() + }) }) From 69f8d977625b35d22d72ec6df54c3aab7f59a62a Mon Sep 17 00:00:00 2001 From: Jamie Dixon Date: Sat, 30 Jan 2016 10:40:04 +0000 Subject: [PATCH 5/5] Removed extra new line after last assertion --- test/createStore.spec.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/createStore.spec.js b/test/createStore.spec.js index fff419aa43..d4c4b1af37 100644 --- a/test/createStore.spec.js +++ b/test/createStore.spec.js @@ -567,6 +567,5 @@ describe('createStore', () => { expect(() => store.subscribe(undefined) ).toThrow() - }) })