[tests] <StrictMode /> nested in tree is broken (#31825)

Adds a test that shows using <StrictMode /> anywhere outside of the root
node will not fire strict effects.

This works:

```js
root.render(
  <StrictMode>
    <App>
      <Children />
    </App>
  </StrictMode>
);
  ```
  
  This does not fire strict effects on mount:
```js
root.render(
  <App>
    <StrictMode>
      <Children />
    </StrictMode>
  </App>
);
```
This commit is contained in:
Ricky
2024-12-18 13:29:41 -05:00
committed by GitHub
parent 1e9ef39a87
commit e1d843f4d8
@@ -179,6 +179,40 @@ describe('ReactStrictMode', () => {
'B: useEffect mount',
]);
});
it('should support nested strict mode on initial mount', async () => {
function Wrapper({children}) {
return children;
}
await act(() => {
const container = document.createElement('div');
const root = ReactDOMClient.createRoot(container);
root.render(
<Wrapper>
<Component label="A" />
<React.StrictMode>
<Component label="B" />,
</React.StrictMode>
,
</Wrapper>,
);
});
expect(log).toEqual([
'A: render',
'B: render',
'B: render',
'A: useLayoutEffect mount',
'B: useLayoutEffect mount',
'A: useEffect mount',
'B: useEffect mount',
// TODO: this is currently broken
// 'B: useLayoutEffect unmount',
// 'B: useEffect unmount',
// 'B: useLayoutEffect mount',
// 'B: useEffect mount',
]);
});
}
});
});