From a7b6e78943e6c90f957436b3561541f7682c2a53 Mon Sep 17 00:00:00 2001 From: Jordan Harband Date: Tue, 28 Aug 2018 15:35:25 -0700 Subject: [PATCH] [Fix] `debug`: inspect objects instead of showing them as `` --- packages/enzyme-test-suite/test/Debug-spec.jsx | 8 +++++++- packages/enzyme/src/Debug.js | 16 ++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/enzyme-test-suite/test/Debug-spec.jsx b/packages/enzyme-test-suite/test/Debug-spec.jsx index e577782b8..b47a0f0a0 100644 --- a/packages/enzyme-test-suite/test/Debug-spec.jsx +++ b/packages/enzyme-test-suite/test/Debug-spec.jsx @@ -813,7 +813,7 @@ describe('debug', () => { it('handles function children', () => { class Abomination extends React.Component { render() { - /* eslint no-unused-vars: 0, func-names: 0 */ + /* eslint no-unused-vars: 0, func-names: 0, react/no-children-prop: 0 */ return (
{function Foo() { /* hi */ }} @@ -821,6 +821,8 @@ describe('debug', () => { {arrow => arrow('function')} {[1, 2, NaN]} {function (anonymous) {}} + {{ a: 'b' }} +
); } @@ -836,6 +838,10 @@ describe('debug', () => { 2 NaN [function] + {{ a: 'b' }} + + {{ c: 'd' }} + ` )); }); diff --git a/packages/enzyme/src/Debug.js b/packages/enzyme/src/Debug.js index 126d4735c..da33c6a77 100644 --- a/packages/enzyme/src/Debug.js +++ b/packages/enzyme/src/Debug.js @@ -5,6 +5,7 @@ import isNumber from 'is-number-object'; import isCallable from 'is-callable'; import isBoolean from 'is-boolean-object'; import inspect from 'object-inspect'; +import has from 'has'; import { propsOfNode, @@ -67,6 +68,16 @@ function indentChildren(childrenStrs, indentLength) { : ''; } +function isRSTNodeLike(node) { + return has(node, 'nodeType') + && typeof node.nodeType === 'string' + && has(node, 'type') + && has(node, 'key') + && has(node, 'ref') + && has(node, 'instance') + && has(node, 'rendered'); +} + export function debugNode(node, indentLength = 2, options = {}) { if (typeof node === 'string' || typeof node === 'number') return escape(node); if (typeof node === 'function') { @@ -75,6 +86,11 @@ export function debugNode(node, indentLength = 2, options = {}) { } if (!node) return ''; + const adapter = getAdapter(); + if (!adapter.isValidElement(node) && !isRSTNodeLike(node)) { + return `{${inspect(node)}}`; + } + const childrenStrs = childrenOfNode(node) .map(n => debugNode(n, indentLength, options)) .filter(Boolean);