diff --git a/packages/shared/stub-components.js b/packages/shared/stub-components.js
index 3cc1ba207..6bc9250d3 100644
--- a/packages/shared/stub-components.js
+++ b/packages/shared/stub-components.js
@@ -202,6 +202,11 @@ function stubComponents (
const componentOptions = typeof cmp === 'function'
? cmp.extendOptions
: cmp
+
+ if (!componentOptions) {
+ stubbedComponents[component] = createBlankStub({}, component)
+ return
+ }
// Remove cached constructor
delete componentOptions._Ctor
if (!componentOptions.name) {
diff --git a/test/specs/mount.spec.js b/test/specs/mount.spec.js
index 906dfc26b..c248915db 100644
--- a/test/specs/mount.spec.js
+++ b/test/specs/mount.spec.js
@@ -162,6 +162,22 @@ describeRunIf(process.env.TEST_ENV !== 'node', 'mount', () => {
expect(wrapper.html()).to.equal(`
`)
})
+ itDoNotRunIf(
+ vueVersion < 2.4, // auto resolve of default export added in 2.4
+ 'handles components as dynamic imports', (done) => {
+ const TestComponent = {
+ template: '',
+ components: {
+ AsyncComponent: () => import('~resources/components/component.vue')
+ }
+ }
+ const wrapper = mount(TestComponent)
+ setTimeout(() => {
+ expect(wrapper.find(Component).exists()).to.equal(true)
+ done()
+ })
+ })
+
it('logs if component is extended', () => {
const msg =
`[vue-test-utils]: an extended child component ` +
diff --git a/test/specs/shallow-mount.spec.js b/test/specs/shallow-mount.spec.js
index 3b486bc27..4467fcb8c 100644
--- a/test/specs/shallow-mount.spec.js
+++ b/test/specs/shallow-mount.spec.js
@@ -294,6 +294,19 @@ describeRunIf(process.env.TEST_ENV !== 'node', 'shallowMount', () => {
.to.equal('hey')
})
+ itDoNotRunIf(
+ vueVersion < 2.4, // auto resolve of default export added in 2.4
+ 'handles component as dynamic import', () => {
+ const TestComponent = {
+ template: '',
+ components: {
+ AsyncComponent: () => import('~resources/components/component.vue')
+ }
+ }
+ const wrapper = shallowMount(TestComponent)
+ expect(wrapper.find({ name: 'AsyncComponent' }).exists()).to.equal(true)
+ })
+
it('stubs components registered on localVue after multiple installs', () => {
const myPlugin = function (_Vue, opts) {
_Vue.mixin({ })