Skip to content

Commit 3254521

Browse files
Julian Muletljharb
authored andcommitted
[enzyme-adapter-react-{16,16.3}] [new] add isCustomComponentElement
1 parent a7f1a47 commit 3254521

3 files changed

Lines changed: 43 additions & 0 deletions

File tree

packages/enzyme-adapter-react-16.3/src/ReactSixteenThreeAdapter.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import TestUtils from 'react-dom/test-utils';
1111
import {
1212
isElement,
1313
isPortal,
14+
isForwardRef,
1415
isValidElementType,
1516
AsyncMode,
1617
Fragment,
@@ -483,6 +484,13 @@ class ReactSixteenThreeAdapter extends EnzymeAdapter {
483484
return typeOfNode(fragment) === Fragment;
484485
}
485486

487+
isCustomComponentElement(inst) {
488+
if (!inst || !this.isValidElement(inst)) {
489+
return false;
490+
}
491+
return typeof inst.type === 'function' || isForwardRef(inst);
492+
}
493+
486494
createElement(...args) {
487495
return React.createElement(...args);
488496
}

packages/enzyme-adapter-react-16/src/ReactSixteenAdapter.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import TestUtils from 'react-dom/test-utils';
1111
import {
1212
isElement,
1313
isPortal,
14+
isForwardRef,
1415
isValidElementType,
1516
AsyncMode,
1617
Fragment,
@@ -525,6 +526,13 @@ class ReactSixteenAdapter extends EnzymeAdapter {
525526
return typeOfNode(fragment) === Fragment;
526527
}
527528

529+
isCustomComponentElement(inst) {
530+
if (!inst || !this.isValidElement(inst)) {
531+
return false;
532+
}
533+
return typeof inst.type === 'function' || isForwardRef(inst);
534+
}
535+
528536
createElement(...args) {
529537
return React.createElement(...args);
530538
}

packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6923,6 +6923,33 @@ describe('shallow', () => {
69236923
expect(underwater.is(RendersDOM)).to.equal(true);
69246924
});
69256925

6926+
describeIf(is('>=16.3.0'), 'forwardRef Elements', () => {
6927+
const ForwardRefWrapsRendersDOM = forwardRef && forwardRef(() => <WrapsRendersDOM />);
6928+
const NestedForwarRefsWrapsRendersDom = forwardRef
6929+
&& forwardRef(() => <ForwardRefWrapsRendersDOM />);
6930+
6931+
if (forwardRef) {
6932+
NestedForwarRefsWrapsRendersDom.contextTypes = { foo: PropTypes.string };
6933+
ForwardRefWrapsRendersDOM.contextTypes = { foo: PropTypes.string };
6934+
}
6935+
6936+
it('dives + shallow-renders a forwardRef component', () => {
6937+
const wrapper = shallow(<ForwardRefWrapsRendersDOM />);
6938+
expect(wrapper.is(WrapsRendersDOM)).to.equal(true);
6939+
6940+
const underwater = wrapper.dive();
6941+
expect(underwater.is(RendersDOM)).to.equal(true);
6942+
});
6943+
6944+
it('dives + shallow-renders a with nested forwardRefs component', () => {
6945+
const wrapper = shallow(<NestedForwarRefsWrapsRendersDom />);
6946+
expect(wrapper.is(ForwardRefWrapsRendersDOM)).to.equal(true);
6947+
6948+
const underwater = wrapper.dive();
6949+
expect(underwater.is(WrapsRendersDOM)).to.equal(true);
6950+
});
6951+
});
6952+
69266953
it('merges and pass options through', () => {
69276954
const wrapper = shallow(<ContextWrapsRendersDOM />, { context: { foo: 'hello' } });
69286955
expect(wrapper.context()).to.deep.equal({ foo: 'hello' });

0 commit comments

Comments
 (0)