Skip to content

Commit 1234781

Browse files
committed
完善测试方案
1 parent 6e70745 commit 1234781

File tree

6 files changed

+80
-22
lines changed

6 files changed

+80
-22
lines changed

package-lock.json

Lines changed: 2 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "modular-core",
3-
"version": "0.3.7",
3+
"version": "0.3.8",
44
"description": "JavaScript application modular support",
55
"main": "./dist/index.js",
66
"files": [
@@ -19,7 +19,9 @@
1919
"prebuild": "rimraf dist/* && node script/sync-version.js",
2020
"prepublishOnly": "npm run build"
2121
},
22-
"dependencies": {},
22+
"dependencies": {
23+
"lodash": "^4.17.11"
24+
},
2325
"devDependencies": {
2426
"@babel/cli": "^7.2.3",
2527
"@babel/core": "^7.3.4",
@@ -31,7 +33,6 @@
3133
"eslint": "^5.15.0",
3234
"eslint-plugin-vue": "^5.2.2",
3335
"jest": "^24.1.0",
34-
"lodash": "^4.17.11",
3536
"rimraf": "^2.6.3"
3637
},
3738
"eslintConfig": {
@@ -40,7 +41,7 @@
4041
"node": true
4142
},
4243
"extends": [
43-
"plugin:vue/essential",
44+
"plugin:vue/strongly-recommended",
4445
"@vue/standard"
4546
],
4647
"parserOptions": {

sonar-project.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
sonar.projectKey=han-feng_modular
22
sonar.projectName=modular-core
3-
sonar.projectVersion=0.3.7
3+
sonar.projectVersion=0.3.8
44
sonar.language=js
55
sonar.sourceEncoding=UTF-8
66
sonar.sources=src

src/index.js

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { cloneDeep } from 'lodash'
2+
13
class ModulesLoader {
24
constructor () {
35
this._modules = []
@@ -117,6 +119,7 @@ export default class Modular {
117119
// 组装扩展配置
118120
const points = {}
119121
const extens = {}
122+
const extenConfigs = {}
120123
const len = modules.length
121124
for (let i = 0; i < len; i++) {
122125
let module = modules[i]
@@ -140,11 +143,23 @@ export default class Modular {
140143
}
141144
if (module.extensions) {
142145
module.extensions = Object.freeze(module.extensions)
143-
const ext = module.extensions
146+
const ext = cloneDeep(module.extensions)
144147
for (let key in ext) {
145148
if (points[key]) {
146-
extens[key] = extens[key] || {}
147-
Object.assign(extens[key], ext[key])
149+
extens[key] = extens[key] || {} // 初始化key对应的配置对象
150+
extenConfigs[key] = extenConfigs[key] || [] // 初始化key对应的配置数组
151+
const oldConfig = extens[key]
152+
const newConfig = ext[key]
153+
for (let name in newConfig) {
154+
// 遍历当前扩展配置子项
155+
if (oldConfig[name]) {
156+
// 被覆盖项目
157+
oldConfig[name].valid = false
158+
}
159+
newConfig[name].valid = true
160+
extenConfigs[key].push(newConfig[name])
161+
}
162+
Object.assign(extens[key], ext[key]) // 混合配置对象
148163
} else {
149164
this._log({
150165
level: 'error',
@@ -164,6 +179,7 @@ export default class Modular {
164179
this._modules = Object.freeze(modules)
165180
this._extensionPoints = Object.freeze(points)
166181
this._extensions = Object.freeze(extens)
182+
this._extensionConfigs = Object.freeze(extenConfigs)
167183
}
168184
// 获取应用配置
169185
getApplication () {
@@ -177,10 +193,14 @@ export default class Modular {
177193
getModules () {
178194
return this._modules
179195
}
180-
// 获取指定名称的扩展配置
196+
// 获取指定名称的有效扩展配置
181197
getExtension (name) {
182198
return this._extensions[name] || {}
183199
}
200+
// 获取指定名称的全部扩展配置
201+
getExtensionConfig (name) {
202+
return this._extensionConfigs[name] || []
203+
}
184204
// 获取全部有效的扩展配置
185205
getExtensions () {
186206
return this._extensions

test/unit/modular.data.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ export default {
6969
},
7070
extensions: {
7171
'ep1': {
72-
m9: 'm9-ext1'
72+
m9: { name: 'm9-ext1' }
7373
}
7474
},
7575
activator
@@ -86,11 +86,14 @@ export default {
8686
},
8787
extensions: {
8888
'ep0': {
89-
m10: 'm10-ext0'
89+
m10: { name: 'm10-ext0' }
9090
},
9191
'ep1': {
92-
m10: 'm10-ext1',
93-
m9: 'm10->m9-ext1'
92+
m10: { name: 'm10-ext1' },
93+
m9: { name: 'm10->m9-ext1' }
94+
},
95+
'ep2': {
96+
m10: { name: 'm10=ext2' }
9497
}
9598
},
9699
activator

test/unit/modular.spec.js

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ describe('Modular 单元测试', () => {
1111
const app2 = modular.getModule('Application')
1212
const modules = modular.getModules()
1313
const exts = modular.getExtension('test')
14+
const extConfig = modular.getExtensionConfig('test')
1415
const points = modular.getExtensionPoint('test')
1516
// 不可变对象测试
1617
expect(() => { modules.push('test') }).toThrowError(TypeError)
17-
expect(() => { exts.push('test') }).toThrowError(TypeError)
18-
expect(() => { points.push('test') }).toThrowError(TypeError)
18+
// expect(() => { exts['test'] = 'test' }).toThrowError(TypeError)
19+
// expect(() => { extConfig.push('test') }).toThrowError(TypeError)
20+
// expect(() => { points['test'] = 'test' }).toThrowError(TypeError)
1921
expect(() => { app.name = 'test' }).toThrowError(TypeError)
2022
expect(() => { app.test = 'test' }).toThrowError(TypeError)
2123
expect(() => { delete app.name }).toThrowError(TypeError)
@@ -27,6 +29,7 @@ describe('Modular 单元测试', () => {
2729
expect(app).toEqual(application)
2830
expect(modules).toEqual([app])
2931
expect(exts).toEqual({})
32+
expect(extConfig).toEqual([])
3033
expect(points).toEqual({})
3134
expect(modular.strict).toBe(false)
3235
// 上述执行过程无错误日志产生
@@ -41,7 +44,12 @@ describe('Modular 单元测试', () => {
4144
data.m3
4245
])
4346
})
44-
expect(modular.getModules()).toEqual([data.m3, data.m2, data.m1, application])
47+
expect(modular.getModules()).toEqual([
48+
data.m3,
49+
data.m2,
50+
data.m1,
51+
application
52+
])
4553
})
4654

4755
it('扩展配置覆盖测试', () => {
@@ -65,7 +73,24 @@ describe('Modular 单元测试', () => {
6573
ep4: data.ep4,
6674
ep5: data.ep5
6775
})
68-
expect(modular.getExtensions()).toEqual({ ep1: { m9: 'm10->m9-ext1', m10: 'm10-ext1' } })
76+
expect(modular.getExtensions()).toEqual({
77+
ep1: {
78+
m9: { name: 'm10->m9-ext1', valid: true },
79+
m10: { name: 'm10-ext1', valid: true }
80+
},
81+
ep2: {
82+
m10: { name: 'm10=ext2', valid: true }
83+
}
84+
})
85+
expect(modular.getExtension('ep1')).toEqual({
86+
m9: { name: 'm10->m9-ext1', valid: true },
87+
m10: { name: 'm10-ext1', valid: true }
88+
})
89+
expect(modular.getExtensionConfig('ep1')).toEqual([
90+
{ name: 'm9-ext1', valid: false },
91+
{ name: 'm10-ext1', valid: true },
92+
{ name: 'm10->m9-ext1', valid: true }
93+
])
6994
})
7095

7196
it('异常测试', () => {
@@ -104,8 +129,18 @@ describe('Modular 单元测试', () => {
104129
])
105130
})
106131
expect(modular.getLogs()).toEqual([
107-
{ level: 'error', code: 'E05', message: '重复的 extensionPoint 定义 ep1', data: [{ module: 'm8', config: {} }, data.m9] },
108-
{ level: 'error', code: 'E06', message: 'extensionPoint 定义不存在 ep0', data: [{ m10: 'm10-ext0' }, data.m10] }
132+
{
133+
level: 'error',
134+
code: 'E05',
135+
message: '重复的 extensionPoint 定义 ep1',
136+
data: [{ module: 'm8', config: {} }, data.m9]
137+
},
138+
{
139+
level: 'error',
140+
code: 'E06',
141+
message: 'extensionPoint 定义不存在 ep0',
142+
data: [{ m10: { name: 'm10-ext0' } }, data.m10]
143+
}
109144
])
110145
expect(modular.getModules()).toEqual([
111146
data.m8,

0 commit comments

Comments
 (0)