diff --git a/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx b/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx
index 9c84ddd8c..d23c3df93 100644
--- a/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx
+++ b/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx
@@ -5774,7 +5774,7 @@ describeWithDOM('mount', () => {
]);
});
- it('calls GDSFP when expected', () => {
+ it('calls gDSFP when expected', () => {
const prevProps = { a: 1 };
const state = { state: true };
const wrapper = mount();
@@ -5821,6 +5821,35 @@ describeWithDOM('mount', () => {
}],
]);
});
+
+ it('cDU’s nextState differs from `this.state` when gDSFP returns new state', () => {
+ class SimpleComponent extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = { value: props.value };
+ }
+
+ static getDerivedStateFromProps(props, state) {
+ return props.value === state.value ? null : { value: props.value };
+ }
+
+ shouldComponentUpdate(nextProps, nextState) {
+ return nextState.value !== this.state.value;
+ }
+
+ render() {
+ const { value } = this.state;
+ return ();
+ }
+ }
+ const wrapper = mount();
+
+ expect(wrapper.find('input').prop('value')).to.equal('initial');
+
+ wrapper.setProps({ value: 'updated' });
+
+ expect(wrapper.find('input').prop('value')).to.equal('updated');
+ });
});
describeIf(is('>= 16'), 'componentDidCatch', () => {
diff --git a/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx b/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx
index e134abe72..86459e854 100644
--- a/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx
+++ b/packages/enzyme-test-suite/test/ShallowWrapper-spec.jsx
@@ -6114,7 +6114,7 @@ describe('shallow', () => {
]);
});
- it('calls GDSFP when expected', () => {
+ it('calls gDSFP when expected', () => {
const prevProps = { a: 1 };
const state = { state: true };
const wrapper = shallow();
@@ -6161,6 +6161,35 @@ describe('shallow', () => {
}],
]);
});
+
+ it('cDU’s nextState differs from `this.state` when gDSFP returns new state', () => {
+ class SimpleComponent extends React.Component {
+ constructor(props) {
+ super(props);
+ this.state = { value: props.value };
+ }
+
+ static getDerivedStateFromProps(props, state) {
+ return props.value === state.value ? null : { value: props.value };
+ }
+
+ shouldComponentUpdate(nextProps, nextState) {
+ return nextState.value !== this.state.value;
+ }
+
+ render() {
+ const { value } = this.state;
+ return ();
+ }
+ }
+ const wrapper = shallow();
+
+ expect(wrapper.find('input').prop('value')).to.equal('initial');
+
+ wrapper.setProps({ value: 'updated' });
+
+ expect(wrapper.find('input').prop('value')).to.equal('updated');
+ });
});
describeIf(is('>= 16'), 'componentDidCatch', () => {