diff --git a/src/formatter/sortObject.js b/src/formatter/sortObject.js index 6871d0041..85655415c 100644 --- a/src/formatter/sortObject.js +++ b/src/formatter/sortObject.js @@ -23,8 +23,13 @@ export default function sortObject(value: any): any { if (key === '_owner') { return result; } - // eslint-disable-next-line no-param-reassign - result[key] = sortObject(value[key]); + if (key === 'current') { + // eslint-disable-next-line no-param-reassign + result[key] = '[Circular]'; + } else { + // eslint-disable-next-line no-param-reassign + result[key] = sortObject(value[key]); + } return result; }, {}); } diff --git a/src/index.spec.js b/src/index.spec.js index 9103d139a..054f6d3c2 100644 --- a/src/index.spec.js +++ b/src/index.spec.js @@ -1126,4 +1126,27 @@ describe('reactElementToJSXString(ReactElement)', () => { } expect(mount().find('#hello')).toHaveLength(1); }); + + it('should not cause recursive loop when an element contains a ref', () => { + expect.assertions(1); + class App extends Component { + constructor(props) { + super(props); + this.inputRef = React.createRef(); + } + componentDidMount() { + expect(reactElementToJSXString()).toEqual( + `` + ); + } + render() { + return ; + } + } + mount(); + }); });