test: test for app.mixin & warnHandler
This commit is contained in:
parent
891f21b010
commit
4c075803b5
@ -10,7 +10,8 @@ import {
|
|||||||
resolveDirective,
|
resolveDirective,
|
||||||
applyDirectives,
|
applyDirectives,
|
||||||
Plugin,
|
Plugin,
|
||||||
ref
|
ref,
|
||||||
|
getCurrentInstance
|
||||||
} from '@vue/runtime-test'
|
} from '@vue/runtime-test'
|
||||||
|
|
||||||
describe('api: createApp', () => {
|
describe('api: createApp', () => {
|
||||||
@ -139,6 +140,78 @@ describe('api: createApp', () => {
|
|||||||
expect(spy3).toHaveBeenCalled()
|
expect(spy3).toHaveBeenCalled()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('mixin', () => {
|
||||||
|
const calls: string[] = []
|
||||||
|
const mixinA = {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
a: 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created(this: any) {
|
||||||
|
calls.push('mixinA created')
|
||||||
|
expect(this.a).toBe(1)
|
||||||
|
expect(this.b).toBe(2)
|
||||||
|
expect(this.c).toBe(3)
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
calls.push('mixinA mounted')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const mixinB = {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
b: 2
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created(this: any) {
|
||||||
|
calls.push('mixinB created')
|
||||||
|
expect(this.a).toBe(1)
|
||||||
|
expect(this.b).toBe(2)
|
||||||
|
expect(this.c).toBe(3)
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
calls.push('mixinB mounted')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const Comp = {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
c: 3
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created(this: any) {
|
||||||
|
calls.push('comp created')
|
||||||
|
expect(this.a).toBe(1)
|
||||||
|
expect(this.b).toBe(2)
|
||||||
|
expect(this.c).toBe(3)
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
calls.push('comp mounted')
|
||||||
|
},
|
||||||
|
render(this: any) {
|
||||||
|
return `${this.a}${this.b}${this.c}`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const app = createApp()
|
||||||
|
app.mixin(mixinA)
|
||||||
|
app.mixin(mixinB)
|
||||||
|
|
||||||
|
const root = nodeOps.createElement('div')
|
||||||
|
app.mount(Comp, root)
|
||||||
|
|
||||||
|
expect(serializeInner(root)).toBe(`123`)
|
||||||
|
expect(calls).toEqual([
|
||||||
|
'mixinA created',
|
||||||
|
'mixinB created',
|
||||||
|
'comp created',
|
||||||
|
'mixinA mounted',
|
||||||
|
'mixinB mounted',
|
||||||
|
'comp mounted'
|
||||||
|
])
|
||||||
|
})
|
||||||
|
|
||||||
test('use', () => {
|
test('use', () => {
|
||||||
const PluginA: Plugin = app => app.provide('foo', 1)
|
const PluginA: Plugin = app => app.provide('foo', 1)
|
||||||
const PluginB: Plugin = {
|
const PluginB: Plugin = {
|
||||||
@ -193,18 +266,24 @@ describe('api: createApp', () => {
|
|||||||
|
|
||||||
test('config.warnHandler', () => {
|
test('config.warnHandler', () => {
|
||||||
const app = createApp()
|
const app = createApp()
|
||||||
|
let ctx: any
|
||||||
|
|
||||||
const handler = (app.config.warnHandler = jest.fn(
|
const handler = (app.config.warnHandler = jest.fn(
|
||||||
(msg, instance, trace) => {}
|
(msg, instance, trace) => {
|
||||||
|
expect(msg).toMatch(`Component is missing render function`)
|
||||||
|
expect(instance).toBe(ctx.renderProxy)
|
||||||
|
expect(trace).toMatch(`Hello`)
|
||||||
|
}
|
||||||
))
|
))
|
||||||
|
|
||||||
const Root = {
|
const Root = {
|
||||||
setup() {}
|
name: 'Hello',
|
||||||
|
setup() {
|
||||||
|
ctx = getCurrentInstance()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
app.mount(Root, nodeOps.createElement('div'))
|
app.mount(Root, nodeOps.createElement('div'))
|
||||||
expect(handler).toHaveBeenCalled()
|
expect(handler).toHaveBeenCalledTimes(1)
|
||||||
})
|
})
|
||||||
|
|
||||||
test.todo('mixin')
|
|
||||||
})
|
})
|
||||||
|
@ -146,15 +146,10 @@ export function applyOptions(
|
|||||||
} = options
|
} = options
|
||||||
|
|
||||||
const globalMixins = instance.appContext.mixins
|
const globalMixins = instance.appContext.mixins
|
||||||
|
// applyOptions is called non-as-mixin once per instance
|
||||||
// beforeCreate
|
|
||||||
if (!asMixin) {
|
if (!asMixin) {
|
||||||
callSyncHook('beforeCreate', options, ctx, globalMixins)
|
callSyncHook('beforeCreate', options, ctx, globalMixins)
|
||||||
}
|
// global mixins are applied first
|
||||||
|
|
||||||
// global mixins are applied first, and only if this is a non-mixin call
|
|
||||||
// so that they are applied once per instance.
|
|
||||||
if (!asMixin) {
|
|
||||||
applyMixins(instance, globalMixins)
|
applyMixins(instance, globalMixins)
|
||||||
}
|
}
|
||||||
// extending a base component...
|
// extending a base component...
|
||||||
|
Loading…
x
Reference in New Issue
Block a user