diff --git a/packages/enzyme-adapter-react-17/src/ReactSeventeenAdapter.js b/packages/enzyme-adapter-react-17/src/ReactSeventeenAdapter.js index 12ddc84ed..9b8bf3ee2 100644 --- a/packages/enzyme-adapter-react-17/src/ReactSeventeenAdapter.js +++ b/packages/enzyme-adapter-react-17/src/ReactSeventeenAdapter.js @@ -273,7 +273,10 @@ function toTree(vnode) { case FiberTags.Mode: case FiberTags.ContextProvider: case FiberTags.ContextConsumer: + case FiberTags.Lazy: + case FiberTags.OffscreenComponent: { return childrenToTree(node.child); + } case FiberTags.Profiler: case FiberTags.ForwardRef: { return { @@ -297,11 +300,6 @@ function toTree(vnode) { rendered: childrenToTree(node.child), }; } - case FiberTags.Lazy: - return childrenToTree(node.child); - case FiberTags.OffscreenComponent: { - return toTree(node.child); - } default: { throw new Error(`Enzyme Internal Error: unknown node with tag ${node.tag}`); } @@ -504,6 +502,7 @@ class ReactSeventeenAdapter extends EnzymeAdapter { nodeTypeFromType, adapter.displayNameOfNode, catchingType, + true, ); }, simulateEvent(node, event, mock) { @@ -708,6 +707,7 @@ class ReactSeventeenAdapter extends EnzymeAdapter { nodeTypeFromType, adapter.displayNameOfNode, cachedNode.type, + true, ); }, simulateEvent(node, event, ...args) { @@ -732,7 +732,12 @@ class ReactSeventeenAdapter extends EnzymeAdapter { values, location, displayNameOfNode(cachedNode), - () => getComponentStack(hierarchy.concat([cachedNode])), + () => getComponentStack( + hierarchy.concat([cachedNode]), + undefined, + undefined, + true, + ), ); }, }; diff --git a/packages/enzyme-adapter-utils/src/Utils.js b/packages/enzyme-adapter-utils/src/Utils.js index 2f830cfe2..97f652815 100644 --- a/packages/enzyme-adapter-utils/src/Utils.js +++ b/packages/enzyme-adapter-utils/src/Utils.js @@ -274,6 +274,7 @@ export function getComponentStack( hierarchy, getNodeType = nodeTypeFromType, getDisplayName = displayNameOfNode, + useAtStyleStack = false, ) { const tuples = hierarchy.filter((node) => node.type !== RootFinder).map((x) => [ getNodeType(x.type), @@ -286,6 +287,9 @@ export function getComponentStack( // TODO: create proper component stack for react 17 return tuples.map(([, name], i, arr) => { const [, closestComponent] = arr.slice(i + 1).find(([nodeType]) => nodeType !== 'host') || []; + if (useAtStyleStack) { + return `\n at ${name}${closestComponent ? ' ($FILENAME:$LINE:$COL)' : ''}`; + } return `\n in ${name}${closestComponent ? ` (created by ${closestComponent})` : ''}`; }).join(''); } @@ -298,6 +302,7 @@ export function simulateError( getNodeType = nodeTypeFromType, getDisplayName = displayNameOfNode, catchingType = {}, + useAtStyleStack = false, ) { const instance = catchingInstance || {}; @@ -315,7 +320,7 @@ export function simulateError( } if (componentDidCatch) { - const componentStack = getComponentStack(hierarchy, getNodeType, getDisplayName); + const componentStack = getComponentStack(hierarchy, getNodeType, getDisplayName, useAtStyleStack); componentDidCatch.call(instance, error, { componentStack }); } } diff --git a/packages/enzyme-test-suite/test/shared/lifecycles/componentDidCatch.jsx b/packages/enzyme-test-suite/test/shared/lifecycles/componentDidCatch.jsx index 2884fc209..ac97538e7 100644 --- a/packages/enzyme-test-suite/test/shared/lifecycles/componentDidCatch.jsx +++ b/packages/enzyme-test-suite/test/shared/lifecycles/componentDidCatch.jsx @@ -114,11 +114,11 @@ export default function describeCDC({ expect(info).to.deep.equal({ componentStack: is('>= 17') ? ` - at Thrower (${__filename}:2369:29) - at span - at div - at ErrorBoundary (${__filename}:2386:13) - at WrapperComponent (${path.join(path.dirname(__filename), '../../enzyme-adapter-utils/build/createMountWrapper.js')}:114:7)` + at Thrower (${isShallow ? '$FILENAME:$LINE:$COL' : `${__filename}:2369:29`}) + at span (${isShallow ? '$FILENAME:$LINE:$COL' : `${__filename}:2369:29`}) + at div (${isShallow ? '$FILENAME:$LINE:$COL' : `${__filename}:2369:29`}) + at ErrorBoundary (${isShallow ? '$FILENAME:$LINE:$COL' : `${__filename}:2369:29`}) + at WrapperComponent` : ` in Thrower (created by ErrorBoundary) in span (created by ErrorBoundary)${hasFragments ? '' : ` @@ -190,7 +190,14 @@ export default function describeCDC({ const [[actualError, info]] = spy.args; expect(actualError).to.satisfy(properErrorMessage); expect(info).to.deep.equal({ - componentStack: ` + componentStack: is('>= 17') + ? ` + at Thrower (${isShallow ? '$FILENAME:$LINE:$COL' : `${__filename}:75:27`}) + at span + at div + at ErrorBoundary (${isShallow ? '$FILENAME:$LINE:$COL' : `${__filename}:92:11`}) + at WrapperComponent (${isShallow ? '$FILENAME:$LINE:$COL' : `${path.join(__dirname, '../../../../enzyme-adapter-utils/build/createMountWrapper.js')}:114:7`})` + : ` in Thrower (created by ErrorBoundary) in span (created by ErrorBoundary)${hasFragments ? '' : ` in main (created by ErrorBoundary)`} @@ -216,12 +223,12 @@ export default function describeCDC({ expect(info).to.deep.equal({ componentStack: is('>= 17') ? ` - at Thrower (${__filename}:2369:29) + at Thrower (${isShallow ? '$FILENAME:$LINE:$COL' : `${__filename}:75:27`}) at span at div - at ErrorBoundary (${__filename}:2386:13) + at ErrorBoundary (${isShallow ? '$FILENAME:$LINE:$COL' : `${__filename}:92:11`}) at ErrorSFC - at WrapperComponent (${path.join(path.dirname(__filename), '../../enzyme-adapter-utils/build/createMountWrapper.js')}:114:7)` + at WrapperComponent (${isShallow ? '$FILENAME:$LINE:$COL' : `${path.join(__dirname, '../../../../enzyme-adapter-utils/build/createMountWrapper.js')}:114:7`})` : ` in Thrower (created by ErrorBoundary) in span (created by ErrorBoundary)${hasFragments ? '' : ` diff --git a/packages/enzyme-test-suite/test/shared/lifecycles/misc.jsx b/packages/enzyme-test-suite/test/shared/lifecycles/misc.jsx index 86a35f0ab..f0b851b3e 100644 --- a/packages/enzyme-test-suite/test/shared/lifecycles/misc.jsx +++ b/packages/enzyme-test-suite/test/shared/lifecycles/misc.jsx @@ -354,7 +354,13 @@ export default function describeMisc({ || error.message === reactError.message ); const expectedInfo = { - componentStack: ` + componentStack: is('>= 17') + ? ` + at Thrower ($FILENAME:$LINE:$COL) + at div ($FILENAME:$LINE:$COL) + at ErrorBoundary ($FILENAME:$LINE:$COL) + at WrapperComponent` + : ` in Thrower (created by ErrorBoundary) in div (created by ErrorBoundary) in ErrorBoundary (created by WrapperComponent)