Skip to content

Commit

Permalink
Preserve ref/key props on getElement
Browse files Browse the repository at this point in the history
  • Loading branch information
lelandrichardson committed Sep 21, 2017
1 parent 3596fd1 commit 8e48512
Show file tree
Hide file tree
Showing 8 changed files with 48 additions and 6 deletions.
3 changes: 2 additions & 1 deletion packages/enzyme-adapter-react-13/src/ReactThirteenAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
assertDomAvailable,
createRenderWrapper,
createMountWrapper,
propsWithKeysAndRef,
} from 'enzyme-adapter-utils';
import mapNativeEventNames from './ReactThirteenMapNativeEventNames';
import elementToTree from './ReactThirteenElementToTree';
Expand Down Expand Up @@ -225,7 +226,7 @@ class ReactThirteenAdapter extends EnzymeAdapter {
// eslint-disable-next-line class-methods-use-this, no-unused-vars
nodeToElement(node) {
if (!node || typeof node !== 'object') return null;
return React.createElement(node.type, node.props);
return React.createElement(node.type, propsWithKeysAndRef(node));
}

elementToNode(element) {
Expand Down
3 changes: 2 additions & 1 deletion packages/enzyme-adapter-react-14/src/ReactFourteenAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
assertDomAvailable,
createRenderWrapper,
createMountWrapper,
propsWithKeysAndRef,
} from 'enzyme-adapter-utils';

function typeToNodeType(type) {
Expand Down Expand Up @@ -196,7 +197,7 @@ class ReactFifteenAdapter extends EnzymeAdapter {
// eslint-disable-next-line class-methods-use-this, no-unused-vars
nodeToElement(node) {
if (!node || typeof node !== 'object') return null;
return React.createElement(node.type, node.props);
return React.createElement(node.type, propsWithKeysAndRef(node));
}

elementToNode(element) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
assertDomAvailable,
createRenderWrapper,
createMountWrapper,
propsWithKeysAndRef,
} from 'enzyme-adapter-utils';

function compositeTypeToNodeType(type) {
Expand Down Expand Up @@ -226,7 +227,7 @@ class ReactFifteenFourAdapter extends EnzymeAdapter {
// eslint-disable-next-line class-methods-use-this, no-unused-vars
nodeToElement(node) {
if (!node || typeof node !== 'object') return null;
return React.createElement(node.type, node.props);
return React.createElement(node.type, propsWithKeysAndRef(node));
}

elementToNode(element) {
Expand Down
3 changes: 2 additions & 1 deletion packages/enzyme-adapter-react-15/src/ReactFifteenAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
assertDomAvailable,
createRenderWrapper,
createMountWrapper,
propsWithKeysAndRef,
} from 'enzyme-adapter-utils';

function compositeTypeToNodeType(type) {
Expand Down Expand Up @@ -226,7 +227,7 @@ class ReactFifteenAdapter extends EnzymeAdapter {
// eslint-disable-next-line class-methods-use-this, no-unused-vars
nodeToElement(node) {
if (!node || typeof node !== 'object') return null;
return React.createElement(node.type, node.props);
return React.createElement(node.type, propsWithKeysAndRef(node));
}

elementToNode(element) {
Expand Down
3 changes: 2 additions & 1 deletion packages/enzyme-adapter-react-16/src/ReactSixteenAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
withSetStateAllowed,
createRenderWrapper,
createMountWrapper,
propsWithKeysAndRef,
} from 'enzyme-adapter-utils';

const HostRoot = 3;
Expand Down Expand Up @@ -276,7 +277,7 @@ class ReactSixteenAdapter extends EnzymeAdapter {
// eslint-disable-next-line class-methods-use-this, no-unused-vars
nodeToElement(node) {
if (!node || typeof node !== 'object') return null;
return React.createElement(node.type, node.props);
return React.createElement(node.type, propsWithKeysAndRef(node));
}

elementToNode(element) {
Expand Down
11 changes: 11 additions & 0 deletions packages/enzyme-adapter-utils/src/Utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -117,3 +117,14 @@ export function elementToTree(el) {
rendered,
};
}

export function propsWithKeysAndRef(node) {
if (node.ref !== null || node.key !== null) {
return {
...node.props,
key: node.key,
ref: node.ref,
};
}
return node.props;
}
2 changes: 1 addition & 1 deletion packages/enzyme-test-suite/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,4 @@
"react": "^15.5.0",
"react-dom": "^15.5.0"
}
}
}
26 changes: 26 additions & 0 deletions packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -2756,6 +2756,32 @@ describe('shallow', () => {
});
});

describe('.getElement()', () => {
it('returns nodes with refs as well as well', () => {
class Foo extends React.Component {
constructor(props) {
super(props);
this.setRef = this.setRef.bind(this);
this.node = null;
}
setRef(node) {
this.node = node;
}
render() {
return (
<div>
<div ref={this.setRef} className="foo" />
</div>
);
}
}
const wrapper = shallow(<Foo />);
const mockNode = { mock: true };
wrapper.find('.foo').getElement().ref(mockNode);
expect(wrapper.instance().node).to.equal(mockNode);
});
});

describe('.debug()', () => {
it('should pass through to the debugNodes function', () => {
expect(shallow(<div />).debug()).to.equal('<div />');
Expand Down

0 comments on commit 8e48512

Please sign in to comment.