diff --git a/packages/react-reconciler/src/__tests__/ReactMemo-test.js b/packages/react-reconciler/src/__tests__/ReactMemo-test.js index 24788e0e87..5be63d65a3 100644 --- a/packages/react-reconciler/src/__tests__/ReactMemo-test.js +++ b/packages/react-reconciler/src/__tests__/ReactMemo-test.js @@ -497,5 +497,44 @@ describe('memo', () => { expect(root).toMatchRenderedOutput('1'); }); }); + + it('should honor a displayName if set on the memo wrapper in warnings', () => { + const MemoComponent = React.memo(function Component(props) { + return
; + }); + MemoComponent.displayName = 'Foo'; + MemoComponent.propTypes = { + required: PropTypes.string.isRequired, + }; + + expect(() => + ReactNoop.render(), + ).toErrorDev( + 'Warning: Failed prop type: The prop `required` is marked as required in ' + + '`Foo`, but its value is `undefined`.\n' + + ' in Foo (at **)', + ); + }); + + it('should honor a inner displayName if set on the wrapped function', () => { + function Component(props) { + return
; + } + Component.displayName = 'Foo'; + + const MemoComponent = React.memo(Component); + MemoComponent.displayName = 'Bar'; + MemoComponent.propTypes = { + required: PropTypes.string.isRequired, + }; + + expect(() => + ReactNoop.render(), + ).toErrorDev( + 'Warning: Failed prop type: The prop `required` is marked as required in ' + + '`Foo`, but its value is `undefined`.\n' + + ' in Foo (at **)', + ); + }); } });