From c7282ebc52aafd3442f7b52dde75354bae973674 Mon Sep 17 00:00:00 2001 From: Josh Minzner Date: Mon, 7 Jan 2019 09:41:21 -0500 Subject: [PATCH] [enzyme-adapter-react-{16,16.1,16.2}] [fix] Filter legacy context on childContextTypes when necessary Fixes #1590. --- .../src/ReactSixteenOneAdapter.js | 4 +++- .../src/ReactSixteenTwoAdapter.js | 4 +++- .../src/ReactSixteenAdapter.js | 4 +++- .../test/ShallowWrapper-spec.jsx | 24 +++++++++++++++++++ 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/packages/enzyme-adapter-react-16.1/src/ReactSixteenOneAdapter.js b/packages/enzyme-adapter-react-16.1/src/ReactSixteenOneAdapter.js index d59974ca3..b4ea3a9d5 100644 --- a/packages/enzyme-adapter-react-16.1/src/ReactSixteenOneAdapter.js +++ b/packages/enzyme-adapter-react-16.1/src/ReactSixteenOneAdapter.js @@ -29,6 +29,7 @@ import { ensureKeyOrUndefined, simulateError, wrap, + getMaskedContext, } from 'enzyme-adapter-utils'; import { findCurrentFiberUsingSlowPath } from 'react-reconciler/reflection'; @@ -315,7 +316,7 @@ class ReactSixteenOneAdapter extends EnzymeAdapter { let isDOM = false; let cachedNode = null; return { - render(el, context) { + render(el, unmaskedContext) { cachedNode = el; /* eslint consistent-return: 0 */ if (typeof el.type === 'string') { @@ -328,6 +329,7 @@ class ReactSixteenOneAdapter extends EnzymeAdapter { Component.prototype.isReactComponent || Array.isArray(Component.__reactAutoBindPairs) // fallback for createClass components ); + const context = getMaskedContext(Component.contextTypes, unmaskedContext); if (!isStateful && typeof Component === 'function') { const wrappedEl = Object.assign( diff --git a/packages/enzyme-adapter-react-16.2/src/ReactSixteenTwoAdapter.js b/packages/enzyme-adapter-react-16.2/src/ReactSixteenTwoAdapter.js index 4b64a859f..618e36aa4 100644 --- a/packages/enzyme-adapter-react-16.2/src/ReactSixteenTwoAdapter.js +++ b/packages/enzyme-adapter-react-16.2/src/ReactSixteenTwoAdapter.js @@ -30,6 +30,7 @@ import { ensureKeyOrUndefined, simulateError, wrap, + getMaskedContext, } from 'enzyme-adapter-utils'; import { findCurrentFiberUsingSlowPath } from 'react-reconciler/reflection'; @@ -317,7 +318,7 @@ class ReactSixteenTwoAdapter extends EnzymeAdapter { let isDOM = false; let cachedNode = null; return { - render(el, context) { + render(el, unmaskedContext) { cachedNode = el; /* eslint consistent-return: 0 */ if (typeof el.type === 'string') { @@ -330,6 +331,7 @@ class ReactSixteenTwoAdapter extends EnzymeAdapter { Component.prototype.isReactComponent || Array.isArray(Component.__reactAutoBindPairs) // fallback for createClass components ); + const context = getMaskedContext(Component.contextTypes, unmaskedContext); if (!isStateful && typeof Component === 'function') { const wrappedEl = Object.assign( diff --git a/packages/enzyme-adapter-react-16/src/ReactSixteenAdapter.js b/packages/enzyme-adapter-react-16/src/ReactSixteenAdapter.js index 3840f47f6..e1f23f7bc 100644 --- a/packages/enzyme-adapter-react-16/src/ReactSixteenAdapter.js +++ b/packages/enzyme-adapter-react-16/src/ReactSixteenAdapter.js @@ -39,6 +39,7 @@ import { ensureKeyOrUndefined, simulateError, wrap, + getMaskedContext, } from 'enzyme-adapter-utils'; import findCurrentFiberUsingSlowPath from './findCurrentFiberUsingSlowPath'; import detectFiberTags from './detectFiberTags'; @@ -343,7 +344,7 @@ class ReactSixteenAdapter extends EnzymeAdapter { let isDOM = false; let cachedNode = null; return { - render(el, context) { + render(el, unmaskedContext) { cachedNode = el; /* eslint consistent-return: 0 */ if (typeof el.type === 'string') { @@ -357,6 +358,7 @@ class ReactSixteenAdapter extends EnzymeAdapter { || Array.isArray(Component.__reactAutoBindPairs) // fallback for createClass components ); + const context = getMaskedContext(Component.contextTypes, unmaskedContext); if (!isStateful && typeof Component === 'function') { const wrappedEl = Object.assign( (...args) => Component(...args), // eslint-disable-line new-cap diff --git a/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx b/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx index 1f5ed13d5..fee5c920e 100644 --- a/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx +++ b/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx @@ -4480,6 +4480,30 @@ describe('shallow', () => { expect(wrapper.context().name).to.equal(context.name); expect(wrapper.context('name')).to.equal(context.name); }); + + it('filters context to childContextTypes', () => { + class Bar extends React.Component { + render() { + return
; + } + } + Bar.contextTypes = { + name: PropTypes.string, + }; + class Foo extends React.Component { + render() { + return ( +
+ +
+ ); + } + } + + const context = { name: 'foo', hello: 'world' }; + const wrapper = shallow(, { context }); + expect(wrapper.find(Bar).dive().context()).to.eql({ name: 'foo' }); + }); }); describeIf(is('> 0.13'), 'stateless function components', () => {