diff --git a/test/utils/mount-in-enzyme.tsx b/test/utils/mount-in-enzyme.tsx new file mode 100644 index 0000000..e613ad0 --- /dev/null +++ b/test/utils/mount-in-enzyme.tsx @@ -0,0 +1,33 @@ +import * as React from "react"; +import { mount } from "enzyme"; +import { FiberNode } from '../../src/mocked-types'; + +export class RootNodeNotFoundError extends Error { + static message = `Couldn't find root node. This might occur if render has become async` + constructor() { + super(RootNodeNotFoundError.message); + this.name = "RootNodeNotFoundError"; + } +} + +export function mountAndGetRootNode( + SomeComponentClass: typeof React.Component, + container: HTMLElement +) { + const rootRef = React.createRef(); + + // TODO: later make this async as mount might be async and hence next steps will fail + mount(, { attachTo: container }); + + if (rootRef.current === null) { + throw new RootNodeNotFoundError(); + } + + const rootNode = ((rootRef.current as any)._reactInternalFiber as FiberNode).child; + + if (rootNode === null) { + throw new RootNodeNotFoundError(); + } + + return rootNode; +}