diff --git a/packages/shared/validators.js b/packages/shared/validators.js index 55da960d6..64a15b5e3 100644 --- a/packages/shared/validators.js +++ b/packages/shared/validators.js @@ -45,6 +45,10 @@ export function isVueComponent(c: any): boolean { return true } + if (typeof c.setup === 'function' && !c.render) { + return true + } + return typeof c.render === 'function' } diff --git a/test/specs/mount.spec.js b/test/specs/mount.spec.js index 8cb454ccb..8b3b71f3e 100644 --- a/test/specs/mount.spec.js +++ b/test/specs/mount.spec.js @@ -437,6 +437,31 @@ describeRunIf(process.env.TEST_ENV !== 'node', 'mount', () => { expect(wrapper.html()).toEqual('
msg
') }) + itSkipIf( + vueVersion < 2.6, + 'supports components returning render function from setup as stubs', + () => { + const localVue = createLocalVue() + localVue.use(CompositionAPI) + const Parent = { + setup(props, { slots }) { + return () => createElement('div', slots.default()) + } + } + const Child = { + setup() { + return () => createElement('div', 'child') + } + } + const wrapper = mount(Parent, { + localVue, + stubs: { child: Child }, + slots: { default: [``] } + }) + expect(wrapper.html()).toEqual('
\n
child
\n
') + } + ) + itDoNotRunIf.skip( vueVersion >= 2.5, 'throws if component throws during update',