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..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: { diff --git a/test/unit/modules.spec.js b/test/unit/modules.spec.js index 0fb113784..17a09857b 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' }})