fix(runtime-core): ensure consistent $options merge behavior with 2.x (#1986)

close #1978 , close #1979
This commit is contained in:
ᴜɴвʏтᴇ
2020-08-31 20:04:06 -05:00
committed by GitHub
parent 8ed0b342d4
commit 706b52aadd
3 changed files with 51 additions and 4 deletions

View File

@@ -457,7 +457,7 @@ describe('api: createApp', () => {
app.config.optionMergeStrategies.foo = (a, b) => (a ? `${a},` : ``) + b
app.mount(nodeOps.createElement('div'))
expect(merged!).toBe('global,extends,mixin,local')
expect(merged!).toBe('local,extends,mixin,global')
})
test('config.globalProperties', () => {

View File

@@ -698,6 +698,50 @@ describe('api: options', () => {
])
})
test('flatten merged options', async () => {
const MixinBase = {
msg1: 'base'
}
const ExtendsBase = {
msg2: 'base'
}
const Mixin = {
mixins: [MixinBase]
}
const Extends = {
extends: ExtendsBase
}
const Comp = defineComponent({
extends: defineComponent(Extends),
mixins: [defineComponent(Mixin)],
render() {
return `${this.$options.msg1},${this.$options.msg2}`
}
})
expect(renderToString(h(Comp))).toBe('base,base')
})
test('options defined in component have higher priority', async () => {
const Mixin = {
msg1: 'base'
}
const Extends = {
msg2: 'base'
}
const Comp = defineComponent({
msg1: 'local',
msg2: 'local',
extends: defineComponent(Extends),
mixins: [defineComponent(Mixin)],
render() {
return `${this.$options.msg1},${this.$options.msg2}`
}
})
expect(renderToString(h(Comp))).toBe('local,local')
})
test('accessing setup() state from options', async () => {
const Comp = defineComponent({
setup() {