From 2ca9639a872d5bd8d15ec5dbfd09e4f9de6de5cf Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Fri, 29 Jun 2018 11:29:25 -0700 Subject: [PATCH] [enzyme-adapter-react-14] [fix] `mount`: make sure it works with native arrow functions Fixes #1667. --- .babelrc | 3 +++ .../src/ReactFourteenAdapter.js | 2 +- packages/enzyme-test-suite/test/ReactWrapper-spec.jsx | 10 ++++++++++ .../test/_helpers/untranspiledArrowFunction.js | 3 +++ 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 packages/enzyme-test-suite/test/_helpers/untranspiledArrowFunction.js diff --git a/.babelrc b/.babelrc index b7a8b2f5a..c6ba4372e 100644 --- a/.babelrc +++ b/.babelrc @@ -3,4 +3,7 @@ "plugins": [ ["transform-replace-object-assign", "object.assign"], ], + ignore: [ + "packages/enzyme-test-suite/test/_helpers/untranspiled*", + ], } diff --git a/packages/enzyme-adapter-react-14/src/ReactFourteenAdapter.js b/packages/enzyme-adapter-react-14/src/ReactFourteenAdapter.js index e8db2ddb5..3c6d786e8 100644 --- a/packages/enzyme-adapter-react-14/src/ReactFourteenAdapter.js +++ b/packages/enzyme-adapter-react-14/src/ReactFourteenAdapter.js @@ -21,7 +21,7 @@ import { function typeToNodeType(type) { if (typeof type === 'function') { - if (typeof type.prototype.render === 'function') { + if (type.prototype && typeof type.prototype.render === 'function') { return 'class'; } return 'function'; diff --git a/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx b/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx index 6342b64de..7725288c4 100644 --- a/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx +++ b/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx @@ -20,6 +20,7 @@ import { generateEmptyRenderData, } from './_helpers'; import { REACT013, REACT014, REACT16, REACT163, is } from './_helpers/version'; +import realArrowFunction from './_helpers/realArrowFunction'; const getElementPropSelector = prop => x => x.props[prop]; const getWrapperPropSelector = prop => x => x.prop(prop); @@ -1103,6 +1104,15 @@ describeWithDOM('mount', () => { ` )); }); + + it('works with a nested SFC', () => { + const Bar = realArrowFunction(
Hello
); + class Foo extends React.Component { + render() { return ; } + } + const wrapper = mount(); + expect(wrapper.text()).to.equal('Hello'); + }); }); it('does not pass in null or false nodes', () => { diff --git a/packages/enzyme-test-suite/test/_helpers/untranspiledArrowFunction.js b/packages/enzyme-test-suite/test/_helpers/untranspiledArrowFunction.js new file mode 100644 index 000000000..5a86b7ae6 --- /dev/null +++ b/packages/enzyme-test-suite/test/_helpers/untranspiledArrowFunction.js @@ -0,0 +1,3 @@ +// this file is ignored in babelrc, specifically so that tests will be able to run +// on a real arrow function that lacks a .prototype +module.exports = x => () => x;