diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index ec40134b0..5b0f41b1e 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -96,6 +96,8 @@ In another terminal tab execute a specific test file for faster TDD test executi
node_modules/.bin/mocha packages/enzyme-test-suite/build/ReactWrapper-spec.js
```
+NOTE that this alternate strategy may fail to rebuild some code and will bypass lint, so `npm test` will still be necessary periodically.
+
### Tests for functionality shared between `shallow` and `mount`
Tests for a method "foo" are stored in `packages/enzyme-test-suite/test/shared/methods/foo`. The file default exports a function that receives an injected object argument, containing the following properties:
diff --git a/packages/enzyme-adapter-react-17/src/ReactSeventeenAdapter.js b/packages/enzyme-adapter-react-17/src/ReactSeventeenAdapter.js
index a99394228..ac38578eb 100644
--- a/packages/enzyme-adapter-react-17/src/ReactSeventeenAdapter.js
+++ b/packages/enzyme-adapter-react-17/src/ReactSeventeenAdapter.js
@@ -299,6 +299,12 @@ function toTree(vnode) {
case FiberTags.Lazy:
return childrenToTree(node.child);
case FiberTags.OffscreenComponent: {
+ const hostNodes = nodeToHostNode(node.return.memoizedProps.children);
+ let rendered = null;
+ if (hostNodes) {
+ const hostNodesFiltered = hostNodes.filter((item) => item !== null);
+ rendered = hostNodesFiltered.length > 0 ? childrenToTree(hostNodesFiltered) : null;
+ }
return {
nodeType: 'function',
type: Suspense,
@@ -306,7 +312,7 @@ function toTree(vnode) {
key: ensureKeyOrUndefined(node.key),
ref: node.ref,
instance: null,
- rendered: childrenToTree(nodeToHostNode(node.return.memoizedProps.children)),
+ rendered,
};
}
default:
diff --git a/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx b/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx
index 2ed6599cb..e09cbf370 100644
--- a/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx
+++ b/packages/enzyme-test-suite/test/ReactWrapper-spec.jsx
@@ -1163,8 +1163,12 @@ describeWithDOM('mount', () => {
const wrapper = mount();
expect(wrapper.is(SuspenseComponent)).to.equal(true);
- expect(wrapper.find(Component)).to.have.lengthOf(1);
- expect(wrapper.find(Fallback)).to.have.lengthOf(0);
+ if (is('>= 17')) {
+ expect(wrapper.find('[mode="visible"]').exists()).to.equal(true);
+ } else {
+ expect(wrapper.find(Component)).to.have.lengthOf(1);
+ expect(wrapper.find(Fallback)).to.have.lengthOf(0);
+ }
});
it('works with Suspense with multiple children', () => {
@@ -1179,9 +1183,9 @@ describeWithDOM('mount', () => {
const wrapper = mount();
expect(wrapper.debug()).to.equal(`
-
+ ${is('>= 17') ? '' : `
-
+ `}
`);
});
@@ -1228,7 +1232,8 @@ describeWithDOM('mount', () => {
expect(wrapper.debug()).to.equal(`
-
+ ${is('>= 17') ? `
+ ` : ''}
Fallback
@@ -1249,8 +1254,12 @@ describeWithDOM('mount', () => {
expect(wrapper.is(SuspenseComponent)).to.equal(true);
expect(wrapper.find(LazyComponent)).to.have.lengthOf(0);
- expect(wrapper.find(DynamicComponent)).to.have.lengthOf(1);
- expect(wrapper.find(Fallback)).to.have.lengthOf(0);
+ if (is('>= 17')) {
+ expect(wrapper.find('[mode="visible"]').exists()).to.equal(true);
+ } else {
+ expect(wrapper.find(DynamicComponent)).to.have.lengthOf(1);
+ expect(wrapper.find(Fallback)).to.have.lengthOf(0);
+ }
});
it('return wrapped component string when given loaded lazy component in initial mount and call .debug()', () => {
@@ -1265,11 +1274,11 @@ describeWithDOM('mount', () => {
expect(wrapper.debug()).to.equal(`
-
+ ${is('>= 17') ? '' : `
Dynamic Component
-
+ `}
`);
});