diff --git a/packages/create-instance/create-instance.js b/packages/create-instance/create-instance.js index fb7cfc292..fca1bc237 100644 --- a/packages/create-instance/create-instance.js +++ b/packages/create-instance/create-instance.js @@ -52,8 +52,14 @@ export default function createInstance( // root instance when it's instantiated const instanceOptions = extractInstanceOptions(options) + const globalComponents = _Vue.options.components || {} + const componentsToStub = Object.assign( + Object.create(globalComponents), + componentOptions.components + ) + const stubComponentsObject = createStubsFromStubsObject( - componentOptions.components, + componentsToStub, // $FlowIgnore options.stubs, _Vue diff --git a/test/specs/mounting-options/stubs.spec.js b/test/specs/mounting-options/stubs.spec.js index df6efeebe..905c369a7 100644 --- a/test/specs/mounting-options/stubs.spec.js +++ b/test/specs/mounting-options/stubs.spec.js @@ -568,4 +568,26 @@ describeWithShallowAndMount('options.stub', mountingMethod => { expect(wrapper.find(ToStub).exists()).to.be.false expect(wrapper.find(Stub).exists()).to.be.true }) + + it('stubs globally registered components', () => { + const ChildComponent = { + template: '
', + props: ['propA'], + name: 'child-component' + } + const TestComponent = { + template: '' + } + + Vue.component('child-component', ChildComponent) + const wrapper = mountingMethod(TestComponent, { + stubs: { + ChildComponent: true + } + }) + const result = wrapper.find(ChildComponent) + expect(result.exists()).to.be.true + expect(result.props().propA).to.equal('A') + delete Vue.options.components['child-component'] + }) })