diff --git a/src/lib/stub-components.js b/src/lib/stub-components.js index 5f7aff4bd..1e1bb0a8b 100644 --- a/src/lib/stub-components.js +++ b/src/lib/stub-components.js @@ -4,12 +4,15 @@ import Vue from 'vue' import { compileToFunctions } from 'vue-template-compiler' import { throwError } from './util' +function isVueComponent (comp) { + return comp && (comp.render || comp.template || comp.options) +} + function isValidStub (stub: any) { return !!stub && - (typeof stub === 'string' || + typeof stub === 'string' || (stub === true) || - (typeof stub === 'object' && - typeof stub.render === 'function')) + (isVueComponent(stub)) } function isRequiredComponent (name) { diff --git a/test/unit/specs/mount/options/stubs.spec.js b/test/unit/specs/mount/options/stubs.spec.js index e0c3e19e6..304f41b1a 100644 --- a/test/unit/specs/mount/options/stubs.spec.js +++ b/test/unit/specs/mount/options/stubs.spec.js @@ -2,7 +2,9 @@ import { mount, config } from '~vue-test-utils' import ComponentWithChild from '~resources/components/component-with-child.vue' import ComponentWithNestedChildren from '~resources/components/component-with-nested-children.vue' import Component from '~resources/components/component.vue' +import ComponentAsAClass from '~resources/components/component-as-a-class.vue' import { createLocalVue } from '~vue-test-utils' +import Vue from 'vue' describe('mount.stub', () => { let info @@ -22,6 +24,20 @@ describe('mount.stub', () => { config.stubs = configStubsSave }) + it('accepts valid component stubs', () => { + const ComponentWithRender = { render: h => h('div') } + const ComponentWithoutRender = { template: '
' } + const ExtendedComponent = Vue.extend({ template: '
' }) + mount(ComponentWithChild, { + stubs: { + ChildComponent: ComponentAsAClass, + ChildComponent2: ComponentWithRender, + ChildComponent3: ComponentWithoutRender, + ChildComponent4: ExtendedComponent + } + }) + }) + it('replaces component with template string ', () => { const wrapper = mount(ComponentWithChild, { stubs: {