diff --git a/packages/enzyme-adapter-react-16/src/ReactSixteenAdapter.js b/packages/enzyme-adapter-react-16/src/ReactSixteenAdapter.js
index 793b0c33e..3a30327ec 100644
--- a/packages/enzyme-adapter-react-16/src/ReactSixteenAdapter.js
+++ b/packages/enzyme-adapter-react-16/src/ReactSixteenAdapter.js
@@ -690,7 +690,13 @@ class ReactSixteenAdapter extends EnzymeAdapter {
renderedEl = transformSuspense(renderedEl, renderedEl, { suspenseFallback });
const { type: Component } = renderedEl;
- const context = getMaskedContext(Component.contextTypes, unmaskedContext);
+ let context;
+ if (Component.contextType) {
+ const Provider = adapter.getProviderFromConsumer(Component.contextType);
+ context = providerValues.has(Provider) ? providerValues.get(Provider) : getProviderDefaultValue(Provider);
+ } else {
+ context = getMaskedContext(Component.contextTypes, unmaskedContext);
+ }
if (isMemo(el.type)) {
const { type: InnerComp, compare } = el.type;
diff --git a/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx b/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx
index a46c62b56..c240c6113 100644
--- a/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx
+++ b/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx
@@ -666,6 +666,34 @@ describe('shallow', () => {
expect(consumer.text()).to.equal('foo');
});
});
+
+ describe('shallow() on Provider and Consumer through .contextType', () => {
+
+ const { Provider } = React.createContext('howdy!');
+
+ class OuterComponent extends React.Component {
+ render() {
+ return (
+
+ );
+ }
+ }
+
+ class InnerComponent extends React.Component {
+ render() {
+ return this.context;
+ }
+ }
+
+ InnerComponent.contextType = Provider;
+
+ it('works on a Provider', () => {
+ const wrapper = shallow();
+ const provides = wrapper.find(Provider).dive();
+ const provider = provides.find(InnerComponent).shallow();
+ expect(provider.text()).to.equal('foo');
+ });
+ });
});
describeIf(is('> 0.13'), 'stateless function components (SFCs)', () => {