Skip to content

Commit

Permalink
[enzyme-adapter-react-{16,16.3}] [new] add isCustomComponentElement
Browse files Browse the repository at this point in the history
  • Loading branch information
Julian Mulet authored and ljharb committed Sep 20, 2018
1 parent a7f1a47 commit 3254521
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import TestUtils from 'react-dom/test-utils';
import {
isElement,
isPortal,
isForwardRef,
isValidElementType,
AsyncMode,
Fragment,
Expand Down Expand Up @@ -483,6 +484,13 @@ class ReactSixteenThreeAdapter extends EnzymeAdapter {
return typeOfNode(fragment) === Fragment;
}

isCustomComponentElement(inst) {
if (!inst || !this.isValidElement(inst)) {
return false;
}
return typeof inst.type === 'function' || isForwardRef(inst);
}

createElement(...args) {
return React.createElement(...args);
}
Expand Down
8 changes: 8 additions & 0 deletions packages/enzyme-adapter-react-16/src/ReactSixteenAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import TestUtils from 'react-dom/test-utils';
import {
isElement,
isPortal,
isForwardRef,
isValidElementType,
AsyncMode,
Fragment,
Expand Down Expand Up @@ -525,6 +526,13 @@ class ReactSixteenAdapter extends EnzymeAdapter {
return typeOfNode(fragment) === Fragment;
}

isCustomComponentElement(inst) {
if (!inst || !this.isValidElement(inst)) {
return false;
}
return typeof inst.type === 'function' || isForwardRef(inst);
}

createElement(...args) {
return React.createElement(...args);
}
Expand Down
27 changes: 27 additions & 0 deletions packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -6923,6 +6923,33 @@ describe('shallow', () => {
expect(underwater.is(RendersDOM)).to.equal(true);
});

describeIf(is('>=16.3.0'), 'forwardRef Elements', () => {
const ForwardRefWrapsRendersDOM = forwardRef && forwardRef(() => <WrapsRendersDOM />);
const NestedForwarRefsWrapsRendersDom = forwardRef
&& forwardRef(() => <ForwardRefWrapsRendersDOM />);

if (forwardRef) {
NestedForwarRefsWrapsRendersDom.contextTypes = { foo: PropTypes.string };
ForwardRefWrapsRendersDOM.contextTypes = { foo: PropTypes.string };
}

it('dives + shallow-renders a forwardRef component', () => {
const wrapper = shallow(<ForwardRefWrapsRendersDOM />);
expect(wrapper.is(WrapsRendersDOM)).to.equal(true);

const underwater = wrapper.dive();
expect(underwater.is(RendersDOM)).to.equal(true);
});

it('dives + shallow-renders a with nested forwardRefs component', () => {
const wrapper = shallow(<NestedForwarRefsWrapsRendersDom />);
expect(wrapper.is(ForwardRefWrapsRendersDOM)).to.equal(true);

const underwater = wrapper.dive();
expect(underwater.is(WrapsRendersDOM)).to.equal(true);
});
});

it('merges and pass options through', () => {
const wrapper = shallow(<ContextWrapsRendersDOM />, { context: { foo: 'hello' } });
expect(wrapper.context()).to.deep.equal({ foo: 'hello' });
Expand Down

0 comments on commit 3254521

Please sign in to comment.