Skip to content

Commit 66a8ed0

Browse files
committed
add test case that passes on old commit
1 parent 513417d commit 66a8ed0

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
let React;
2+
let Offscreen;
3+
let ReactNoop;
4+
let act;
5+
let log;
6+
let ReactTestRenderer;
7+
8+
let Parent;
9+
let Child;
10+
11+
let shouldSuspend;
12+
let resolve;
13+
let suspensePromise;
14+
15+
describe('ReactOffscreenStrictMode', () => {
16+
beforeEach(() => {
17+
shouldSuspend = true;
18+
resolve;
19+
suspensePromise = new Promise(_resolve => {
20+
resolve = _resolve;
21+
});
22+
ReactTestRenderer = require('react-test-renderer');
23+
jest.resetModules();
24+
log = [];
25+
26+
React = require('react');
27+
Offscreen = React.unstable_Offscreen;
28+
ReactNoop = require('react-noop-renderer');
29+
act = require('jest-react').act;
30+
31+
Parent = function Parent({children}) {
32+
log.push('Parent rendered');
33+
React.useEffect(() => {
34+
log.push('Parent mount');
35+
return () => log.push('Parent unmount');
36+
});
37+
38+
return children;
39+
}
40+
41+
Child = function Child() {
42+
log.push('Child rendered');
43+
React.useEffect(() => {
44+
log.push('Child mount');
45+
return () => log.push('Child unmount');
46+
});
47+
if (shouldSuspend) {
48+
log.push('Child suspended');
49+
throw suspensePromise;
50+
}
51+
return null;
52+
}
53+
});
54+
55+
it('child suspense double invoke test', async () => {
56+
log.push('-------------------------------------------------');
57+
58+
59+
act(() => {
60+
ReactNoop.render(
61+
<React.StrictMode>
62+
<Offscreen mode="visible">
63+
<Parent>
64+
<React.Suspense fallback="fallback">
65+
<Child />
66+
</React.Suspense>
67+
</Parent>
68+
</Offscreen>
69+
</React.StrictMode>,
70+
);
71+
});
72+
73+
log.push('------------------------------');
74+
75+
await act(async () => {
76+
resolve();
77+
shouldSuspend = false;
78+
await suspensePromise;
79+
jest.runAllImmediates();
80+
});
81+
82+
expect(log).toEqual([
83+
'-------------------------------------------------',
84+
'Parent rendered',
85+
'Parent rendered',
86+
'Child rendered',
87+
'Child suspended',
88+
'Parent mount',
89+
'Parent unmount',
90+
'Parent mount',
91+
'------------------------------',
92+
'Child rendered',
93+
'Child rendered',
94+
'Child mount',
95+
'Child unmount',
96+
'Child mount',
97+
]);
98+
});
99+
});

0 commit comments

Comments
 (0)