From 93967bc8d6d42c01ae83be86e70c5ed315b8faee Mon Sep 17 00:00:00 2001 From: Michael James Date: Fri, 16 Oct 2020 17:51:14 -0400 Subject: [PATCH 1/2] Check existence of module parent in isRegistered (fix #1850) --- src/module/module-collection.js | 6 +++++- test/unit/module/module-collection.spec.js | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/module/module-collection.js b/src/module/module-collection.js index 095872882..75e641fce 100644 --- a/src/module/module-collection.js +++ b/src/module/module-collection.js @@ -72,7 +72,11 @@ export default class ModuleCollection { const parent = this.get(path.slice(0, -1)) const key = path[path.length - 1] - return parent.hasChild(key) + if (parent) { + return parent.hasChild(key) + } + + return false } } diff --git a/test/unit/module/module-collection.spec.js b/test/unit/module/module-collection.spec.js index 3e8081ce3..85298c086 100644 --- a/test/unit/module/module-collection.spec.js +++ b/test/unit/module/module-collection.spec.js @@ -100,4 +100,18 @@ describe('ModuleCollection', () => { collection.unregister(['a']) expect(spy).toHaveBeenCalled() }) + + it('isRegistered', () => { + const collection = new ModuleCollection({}) + collection.register(['a'], { + state: { value: true } + }) + collection.register(['a', 'b'], { + state: { value: false } + }) + expect(collection.isRegistered(['a'])).toBe(true) + expect(collection.isRegistered(['a', 'b'])).toBe(true) + expect(collection.isRegistered(['c'])).toBe(false) + expect(collection.isRegistered(['c', 'd'])).toBe(false) + }) }) From 581e2ac0ad85f1177f7a0a9cc9af769e3fb553ae Mon Sep 17 00:00:00 2001 From: Kia Ishii Date: Thu, 5 Nov 2020 17:47:45 +0900 Subject: [PATCH 2/2] test: add more tests --- test/unit/module/module-collection.spec.js | 31 ++++++++++++---------- test/unit/modules.spec.js | 12 +++++++++ 2 files changed, 29 insertions(+), 14 deletions(-) diff --git a/test/unit/module/module-collection.spec.js b/test/unit/module/module-collection.spec.js index 85298c086..514965cab 100644 --- a/test/unit/module/module-collection.spec.js +++ b/test/unit/module/module-collection.spec.js @@ -81,6 +81,23 @@ describe('ModuleCollection', () => { expect(collection.get(['a'])).toBe(undefined) }) + it('isRegistered', () => { + const collection = new ModuleCollection({}) + + collection.register(['a'], { + state: { value: true } + }) + + collection.register(['a', 'b'], { + state: { value: false } + }) + + expect(collection.isRegistered(['a'])).toBe(true) + expect(collection.isRegistered(['a', 'b'])).toBe(true) + expect(collection.isRegistered(['c'])).toBe(false) + expect(collection.isRegistered(['c', 'd'])).toBe(false) + }) + it('does not unregister initial modules', () => { const collection = new ModuleCollection({ modules: { @@ -100,18 +117,4 @@ describe('ModuleCollection', () => { collection.unregister(['a']) expect(spy).toHaveBeenCalled() }) - - it('isRegistered', () => { - const collection = new ModuleCollection({}) - collection.register(['a'], { - state: { value: true } - }) - collection.register(['a', 'b'], { - state: { value: false } - }) - expect(collection.isRegistered(['a'])).toBe(true) - expect(collection.isRegistered(['a', 'b'])).toBe(true) - expect(collection.isRegistered(['c'])).toBe(false) - expect(collection.isRegistered(['c', 'd'])).toBe(false) - }) }) diff --git a/test/unit/modules.spec.js b/test/unit/modules.spec.js index 9ae47c862..8f11842d8 100644 --- a/test/unit/modules.spec.js +++ b/test/unit/modules.spec.js @@ -91,6 +91,18 @@ describe('Modules', () => { expect(store.hasModule('bonjour')).toBe(false) }) + it('dynamic module existance test with nested modules', () => { + const store = new Vuex.Store({}) + + store.registerModule('a', {}) + store.registerModule(['a', 'b'], {}) + + expect(store.hasModule(['a'])).toBe(true) + expect(store.hasModule(['a', 'b'])).toBe(true) + expect(store.hasModule(['c'])).toBe(false) + expect(store.hasModule(['c', 'd'])).toBe(false) + }) + it('dynamic module registration preserving hydration', () => { const store = new Vuex.Store({}) store.replaceState({ a: { foo: 'state' }})