From c9058f5def1d1064111bb20f8e2ed54d6b284c1b Mon Sep 17 00:00:00 2001 From: lanzhiheng Date: Tue, 2 Jan 2018 16:32:11 +0800 Subject: [PATCH 1/2] Add some test and comments for module.js --- src/module/module.js | 5 ++ test/unit/module/module.spec.js | 149 +++++++++++++++++++++++++++++++- 2 files changed, 153 insertions(+), 1 deletion(-) diff --git a/src/module/module.js b/src/module/module.js index cb189f02c..e856333d0 100644 --- a/src/module/module.js +++ b/src/module/module.js @@ -1,11 +1,16 @@ import { forEachValue } from '../util' +// Base data struct for store's module, package with some attribute and method export default class Module { constructor (rawModule, runtime) { this.runtime = runtime + // Store some children item this._children = Object.create(null) + // Store the origin module object which passed by programmer this._rawModule = rawModule const rawState = rawModule.state + + // Store the origin module's state this.state = (typeof rawState === 'function' ? rawState() : rawState) || {} } diff --git a/test/unit/module/module.spec.js b/test/unit/module/module.spec.js index 5905c7f10..f84a4db8f 100644 --- a/test/unit/module/module.spec.js +++ b/test/unit/module/module.spec.js @@ -21,9 +21,156 @@ describe('Module', () => { }) it('get namespacer: namespace option is true', () => { - const module = new Module({ + let module = new Module({ namespaced: true }) expect(module.namespaced).toBe(true) + + module = new Module({ + namespaced: 100 + }) + expect(module.namespaced).toBe(true) + }) + + it('add child method', () => { + const module = new Module({}) + + module.addChild('v1', new Module({})) + module.addChild('v2', new Module({})) + expect(Object.keys(module._children)).toEqual(['v1', 'v2']) + }) + + it('remove child method', () => { + const module = new Module({}) + + module.addChild('v1', new Module({})) + module.addChild('v2', new Module({})) + module.removeChild('v2') + module.removeChild('abc') + expect(Object.keys(module._children)).toEqual(['v1']) + }) + + it('get child method', () => { + const module = new Module({}) + + const subModule1 = new Module({ state: { name: 'v1' }}) + const subModule2 = new Module({ state: { name: 'v2' }}) + module.addChild('v1', subModule1) + module.addChild('v2', subModule2) + expect(module.getChild('v2')).toEqual(subModule2) + expect(module.getChild('v1')).toEqual(subModule1) + }) + + it('update method', () => { + const originObject = { + state: { + name: 'vuex', + version: '2.x.x' + }, + namespaced: true, + actions: { + a1: () => {}, + a2: () => {} + }, + mutations: { + m1: () => {}, + m2: () => {} + }, + getters: { + g1: () => {}, + g2: () => {} + } + } + const newObject = { + actions: { + a3: () => {}, + a4: () => {} + }, + mutations: { + m3: () => {}, + m2: () => {} + }, + getters: { + g1: () => {} + }, + namespaced: false, + state: { + name: 'vuex', + version: '3.x.x' + } + } + const module = new Module(originObject) + + expect(module._rawModule).toEqual(originObject) + + module.update(newObject) + expect(module._rawModule).not.toEqual(newObject) + expect(module._rawModule.actions).toEqual(newObject.actions) + expect(module._rawModule.mutations).toEqual(newObject.mutations) + expect(module._rawModule.getters).toEqual(newObject.getters) + expect(module._rawModule.namespaced).toEqual(newObject.namespaced) + expect(module._rawModule.state).toEqual(originObject.state) + }) + + it('forEachChild method', () => { + const module = new Module({}) + const module1 = new Module({}) + const module2 = new Module({}) + + module.addChild('v1', module1) + module.addChild('v2', module2) + + const collections = [] + module.forEachChild((item) => { collections.push(item) }) + expect(collections.length).toEqual(2) + expect(collections).toEqual([module2, module1]) + }) + + it('forEachAction method', () => { + const action1 = () => {} + const action2 = () => {} + + const module = new Module({ + actions: { + action1, action2 + } + }) + + const collections = [] + module.forEachAction((item) => { collections.push(item) }) + expect(collections.length).toEqual(2) + expect(collections).toEqual([action1, action2]) + }) + + it('forEachGetter method', () => { + const getter1 = () => {} + const getter2 = () => {} + + const module = new Module({ + getters: { + getter1, getter2 + } + }) + + const collections = [] + module.forEachGetter((item) => { collections.push(item) }) + expect(collections.length).toEqual(2) + expect(collections).toEqual([getter1, getter2]) + }) + + it('forEachMutation method', () => { + const mutation1 = () => {} + const mutation2 = () => {} + + const module = new Module({ + mutations: { + mutation1, mutation2 + } + }) + + const collections = [] + module.forEachMutation((item) => { collections.push(item) }) + expect(collections.length).toEqual(2) + expect(collections).toEqual([mutation1, mutation2]) }) }) From 228d416917b32c6583e702478a9c48d0376cbaeb Mon Sep 17 00:00:00 2001 From: lanzhiheng Date: Thu, 4 Jan 2018 09:58:43 +0800 Subject: [PATCH 2/2] Fix some feedback from test case --- test/unit/module/module.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/module/module.spec.js b/test/unit/module/module.spec.js index f84a4db8f..fc619a012 100644 --- a/test/unit/module/module.spec.js +++ b/test/unit/module/module.spec.js @@ -45,6 +45,7 @@ describe('Module', () => { module.addChild('v1', new Module({})) module.addChild('v2', new Module({})) + expect(Object.keys(module._children)).toEqual(['v1', 'v2']) module.removeChild('v2') module.removeChild('abc') expect(Object.keys(module._children)).toEqual(['v1']) @@ -104,7 +105,6 @@ describe('Module', () => { expect(module._rawModule).toEqual(originObject) module.update(newObject) - expect(module._rawModule).not.toEqual(newObject) expect(module._rawModule.actions).toEqual(newObject.actions) expect(module._rawModule.mutations).toEqual(newObject.mutations) expect(module._rawModule.getters).toEqual(newObject.getters)