feat(core): support dynamic component via <component :is> (#320)

This commit is contained in:
宋铄运
2019-10-19 00:09:04 +08:00
committed by Evan You
parent d179918001
commit 7f23eaf661
6 changed files with 133 additions and 22 deletions

View File

@@ -5,7 +5,8 @@ import {
resolveComponent,
resolveDirective,
Component,
Directive
Directive,
resolveDynamicComponent
} from '@vue/runtime-test'
describe('resolveAssets', () => {
@@ -90,5 +91,30 @@ describe('resolveAssets', () => {
expect('Failed to resolve component: foo').toHaveBeenWarned()
expect('Failed to resolve directive: bar').toHaveBeenWarned()
})
test('resolve dynamic component', () => {
const app = createApp()
const dynamicComponents = {
foo: () => 'foo',
bar: () => 'bar',
baz: { render: () => 'baz' }
}
let foo, bar, baz // dynamic components
const Root = {
components: { foo: dynamicComponents.foo },
setup() {
return () => {
foo = resolveDynamicComponent('foo') // <component is="foo"/>
bar = resolveDynamicComponent(dynamicComponents.bar) // <component :is="bar"/>, function
baz = resolveDynamicComponent(dynamicComponents.baz) // <component :is="baz"/>, object
}
}
}
const root = nodeOps.createElement('div')
app.mount(Root, root)
expect(foo).toBe(dynamicComponents.foo)
expect(bar).toBe(dynamicComponents.bar)
expect(baz).toBe(dynamicComponents.baz)
})
})
})