From 0856e7f439babfbba2e1eb7947e241163db4efd0 Mon Sep 17 00:00:00 2001 From: Jason Zukewich Date: Thu, 16 Aug 2018 13:17:43 -0700 Subject: [PATCH] throw when creating root wrappers from invalid components --- packages/enzyme/src/ReactWrapper.js | 7 ++++++- packages/enzyme/src/ShallowWrapper.js | 8 ++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/enzyme/src/ReactWrapper.js b/packages/enzyme/src/ReactWrapper.js index 6266b40ee..f8a6bc4c0 100644 --- a/packages/enzyme/src/ReactWrapper.js +++ b/packages/enzyme/src/ReactWrapper.js @@ -85,8 +85,13 @@ class ReactWrapper { const options = makeOptions(passedOptions); if (!root) { + const adapter = getAdapter(options); + if (!adapter.isValidElement(nodes)) { + throw new TypeError('ReactWrapper can only wrap valid elements') + } + privateSet(this, UNRENDERED, nodes); - const renderer = getAdapter(options).createRenderer({ mode: 'mount', ...options }); + const renderer = adapter.createRenderer({ mode: 'mount', ...options }); privateSet(this, RENDERER, renderer); renderer.render(nodes, options.context); privateSet(this, ROOT, this); diff --git a/packages/enzyme/src/ShallowWrapper.js b/packages/enzyme/src/ShallowWrapper.js index 8c417144a..437b18c88 100644 --- a/packages/enzyme/src/ShallowWrapper.js +++ b/packages/enzyme/src/ShallowWrapper.js @@ -165,13 +165,17 @@ class ShallowWrapper { validateOptions(passedOptions); const options = makeOptions(passedOptions); if (!root) { + const adapter = getAdapter(options); + if (!adapter.isValidElement(nodes)) { + throw new TypeError('ShallowWrapper can only wrap valid elements') + } + privateSet(this, ROOT, this); privateSet(this, UNRENDERED, nodes); - const renderer = getAdapter(options).createRenderer({ mode: 'shallow', ...options }); + const renderer = adapter.createRenderer({ mode: 'shallow', ...options }); privateSet(this, RENDERER, renderer); this[RENDERER].render(nodes, options.context); const { instance } = this[RENDERER].getNode(); - const adapter = getAdapter(this[OPTIONS]); const lifecycles = getAdapterLifecycles(adapter); // Ensure to call componentDidUpdate when instance.setState is called if (instance && lifecycles.componentDidUpdate.onSetState && !instance[SET_STATE]) {