Skip to content

Commit 3cc9e68

Browse files
committed
完善测试案例
1 parent 1234781 commit 3cc9e68

File tree

2 files changed

+51
-35
lines changed

2 files changed

+51
-35
lines changed

src/index.js

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -126,47 +126,49 @@ export default class Modular {
126126
if (module.extensionPoints) {
127127
module.extensionPoints = Object.freeze(module.extensionPoints)
128128
const ps = module.extensionPoints
129-
for (let key in ps) {
130-
if (points[key]) {
129+
for (let name in ps) {
130+
if (points[name]) {
131131
this._log({
132132
level: 'error',
133133
code: 'E05',
134-
message: '重复的 extensionPoint 定义 ' + key,
134+
message: '重复的 extensionPoint 定义 ' + name,
135135
data: [
136-
points[key],
136+
points[name],
137137
module]
138138
})
139139
} else {
140-
points[key] = { module: module.name, config: ps[key] }
140+
points[name] = { module: module.name, config: ps[name] }
141141
}
142142
}
143143
}
144144
if (module.extensions) {
145145
module.extensions = Object.freeze(module.extensions)
146146
const ext = cloneDeep(module.extensions)
147-
for (let key in ext) {
148-
if (points[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) {
147+
for (let name in ext) {
148+
if (points[name]) {
149+
extens[name] = extens[name] || {} // 初始化key对应的配置对象
150+
extenConfigs[name] = extenConfigs[name] || [] // 初始化key对应的配置数组
151+
const oldConfig = extens[name]
152+
const newConfig = ext[name]
153+
for (let key in newConfig) {
154154
// 遍历当前扩展配置子项
155-
if (oldConfig[name]) {
155+
if (oldConfig[key]) {
156156
// 被覆盖项目
157-
oldConfig[name].valid = false
157+
oldConfig[key].valid = false
158+
oldConfig[key]._meta.covers.push(module.name)
158159
}
159-
newConfig[name].valid = true
160-
extenConfigs[key].push(newConfig[name])
160+
newConfig[key].valid = true
161+
newConfig[key]._meta = { module: module.name, key, covers: [] }
162+
extenConfigs[name].push(newConfig[key])
161163
}
162-
Object.assign(extens[key], ext[key]) // 混合配置对象
164+
Object.assign(oldConfig, newConfig) // 混合配置对象
163165
} else {
164166
this._log({
165167
level: 'error',
166168
code: 'E06',
167-
message: 'extensionPoint 定义不存在 ' + key,
169+
message: 'extensionPoint 定义不存在 ' + name,
168170
data: [
169-
ext[key],
171+
ext[name],
170172
module
171173
]
172174
})
@@ -193,17 +195,21 @@ export default class Modular {
193195
getModules () {
194196
return this._modules
195197
}
196-
// 获取指定名称的有效扩展配置
198+
// 获取指定名称的有效扩展配置(对象形式)
197199
getExtension (name) {
198200
return this._extensions[name] || {}
199201
}
200-
// 获取指定名称的全部扩展配置
202+
// 获取全部有效的扩展配置(对象形式)
203+
getExtensions () {
204+
return this._extensions
205+
}
206+
// 获取指定名称的全部扩展配置(数组形式)
201207
getExtensionConfig (name) {
202208
return this._extensionConfigs[name] || []
203209
}
204-
// 获取全部有效的扩展配置
205-
getExtensions () {
206-
return this._extensions
210+
// 获取全部扩展配置(数组形式)
211+
getExtensionConfigs () {
212+
return this._extensionConfigs
207213
}
208214
// 获取指定名称的扩展点定义
209215
getExtensionPoint (name) {

test/unit/modular.spec.js

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ describe('Modular 单元测试', () => {
1515
const points = modular.getExtensionPoint('test')
1616
// 不可变对象测试
1717
expect(() => { modules.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)
18+
// expect(() => { exts['test'] = 'test' }).toThrowError(TypeError) // 暂时未实现不可变
19+
// expect(() => { extConfig.push('test') }).toThrowError(TypeError) // 暂时未实现不可变
20+
// expect(() => { points['test'] = 'test' }).toThrowError(TypeError) // 暂时未实现不可变
2121
expect(() => { app.name = 'test' }).toThrowError(TypeError)
2222
expect(() => { app.test = 'test' }).toThrowError(TypeError)
2323
expect(() => { delete app.name }).toThrowError(TypeError)
@@ -75,21 +75,31 @@ describe('Modular 单元测试', () => {
7575
})
7676
expect(modular.getExtensions()).toEqual({
7777
ep1: {
78-
m9: { name: 'm10->m9-ext1', valid: true },
79-
m10: { name: 'm10-ext1', valid: true }
78+
m9: { name: 'm10->m9-ext1', valid: true, _meta: { module: 'm10', key: 'm9', covers: [] } },
79+
m10: { name: 'm10-ext1', valid: true, _meta: { module: 'm10', key: 'm10', covers: [] } }
8080
},
8181
ep2: {
82-
m10: { name: 'm10=ext2', valid: true }
82+
m10: { name: 'm10=ext2', valid: true, _meta: { module: 'm10', key: 'm10', covers: [] } }
8383
}
8484
})
8585
expect(modular.getExtension('ep1')).toEqual({
86-
m9: { name: 'm10->m9-ext1', valid: true },
87-
m10: { name: 'm10-ext1', valid: true }
86+
m9: { name: 'm10->m9-ext1', valid: true, _meta: { module: 'm10', key: 'm9', covers: [] } },
87+
m10: { name: 'm10-ext1', valid: true, _meta: { module: 'm10', key: 'm10', covers: [] } }
88+
})
89+
expect(modular.getExtensionConfigs()).toEqual({
90+
ep1: [
91+
{ name: 'm9-ext1', valid: false, _meta: { module: 'm9', key: 'm9', covers: ['m10'] } },
92+
{ name: 'm10-ext1', valid: true, _meta: { module: 'm10', key: 'm10', covers: [] } },
93+
{ name: 'm10->m9-ext1', valid: true, _meta: { module: 'm10', key: 'm9', covers: [] } }
94+
],
95+
ep2: [
96+
{ name: 'm10=ext2', valid: true, _meta: { module: 'm10', key: 'm10', covers: [] } }
97+
]
8898
})
8999
expect(modular.getExtensionConfig('ep1')).toEqual([
90-
{ name: 'm9-ext1', valid: false },
91-
{ name: 'm10-ext1', valid: true },
92-
{ name: 'm10->m9-ext1', valid: true }
100+
{ name: 'm9-ext1', valid: false, _meta: { module: 'm9', key: 'm9', covers: ['m10'] } },
101+
{ name: 'm10-ext1', valid: true, _meta: { module: 'm10', key: 'm10', covers: [] } },
102+
{ name: 'm10->m9-ext1', valid: true, _meta: { module: 'm10', key: 'm9', covers: [] } }
93103
])
94104
})
95105

0 commit comments

Comments
 (0)