fix(runtime-core): fix props/emits resolving with global mixins
fix #1975
This commit is contained in:
@@ -178,40 +178,13 @@ describe('component: emit', () => {
|
||||
expect(fn).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
|
||||
describe('isEmitListener', () => {
|
||||
test('array option', () => {
|
||||
const def1 = { emits: ['click'] }
|
||||
expect(isEmitListener(def1, 'onClick')).toBe(true)
|
||||
expect(isEmitListener(def1, 'onclick')).toBe(false)
|
||||
expect(isEmitListener(def1, 'onBlick')).toBe(false)
|
||||
})
|
||||
|
||||
test('object option', () => {
|
||||
const def2 = { emits: { click: null } }
|
||||
expect(isEmitListener(def2, 'onClick')).toBe(true)
|
||||
expect(isEmitListener(def2, 'onclick')).toBe(false)
|
||||
expect(isEmitListener(def2, 'onBlick')).toBe(false)
|
||||
})
|
||||
|
||||
test('with mixins and extends', () => {
|
||||
const mixin1 = { emits: ['foo'] }
|
||||
const mixin2 = { emits: ['bar'] }
|
||||
const extend = { emits: ['baz'] }
|
||||
const def3 = {
|
||||
mixins: [mixin1, mixin2],
|
||||
extends: extend
|
||||
}
|
||||
expect(isEmitListener(def3, 'onFoo')).toBe(true)
|
||||
expect(isEmitListener(def3, 'onBar')).toBe(true)
|
||||
expect(isEmitListener(def3, 'onBaz')).toBe(true)
|
||||
expect(isEmitListener(def3, 'onclick')).toBe(false)
|
||||
expect(isEmitListener(def3, 'onBlick')).toBe(false)
|
||||
})
|
||||
|
||||
test('.once listeners', () => {
|
||||
const def2 = { emits: { click: null } }
|
||||
expect(isEmitListener(def2, 'onClickOnce')).toBe(true)
|
||||
expect(isEmitListener(def2, 'onclickOnce')).toBe(false)
|
||||
})
|
||||
test('isEmitListener', () => {
|
||||
const options = { click: null }
|
||||
expect(isEmitListener(options, 'onClick')).toBe(true)
|
||||
expect(isEmitListener(options, 'onclick')).toBe(false)
|
||||
expect(isEmitListener(options, 'onBlick')).toBe(false)
|
||||
// .once listeners
|
||||
expect(isEmitListener(options, 'onClickOnce')).toBe(true)
|
||||
expect(isEmitListener(options, 'onclickOnce')).toBe(false)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -7,7 +7,8 @@ import {
|
||||
FunctionalComponent,
|
||||
defineComponent,
|
||||
ref,
|
||||
serializeInner
|
||||
serializeInner,
|
||||
createApp
|
||||
} from '@vue/runtime-test'
|
||||
import { render as domRender, nextTick } from 'vue'
|
||||
|
||||
@@ -309,4 +310,44 @@ describe('component props', () => {
|
||||
expect(setupProps).toMatchObject(props)
|
||||
expect(renderProxy.$props).toMatchObject(props)
|
||||
})
|
||||
|
||||
test('merging props from global mixins', () => {
|
||||
let setupProps: any
|
||||
let renderProxy: any
|
||||
|
||||
const M1 = {
|
||||
props: ['m1']
|
||||
}
|
||||
const M2 = {
|
||||
props: { m2: null }
|
||||
}
|
||||
const Comp = {
|
||||
props: ['self'],
|
||||
setup(props: any) {
|
||||
setupProps = props
|
||||
},
|
||||
render(this: any) {
|
||||
renderProxy = this
|
||||
return h('div', [this.self, this.m1, this.m2])
|
||||
}
|
||||
}
|
||||
|
||||
const props = {
|
||||
self: 'from self, ',
|
||||
m1: 'from mixin 1, ',
|
||||
m2: 'from mixin 2'
|
||||
}
|
||||
const app = createApp(Comp, props)
|
||||
app.mixin(M1)
|
||||
app.mixin(M2)
|
||||
|
||||
const root = nodeOps.createElement('div')
|
||||
app.mount(root)
|
||||
|
||||
expect(serializeInner(root)).toMatch(
|
||||
`from self, from mixin 1, from mixin 2`
|
||||
)
|
||||
expect(setupProps).toMatchObject(props)
|
||||
expect(renderProxy.$props).toMatchObject(props)
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user