56
expect(logs).toEqual([]);
57
});
58
59
+ // @gate build === 'development'
60
// @gate experimental || www
61
it('should not log anything for concurrent render without suspends or state updates', () => {
61
- ReactTestRenderer.create(
62
- <React.unstable_DebugTracingMode>
63
- <div />
64
- </React.unstable_DebugTracingMode>,
65
- {unstable_isConcurrent: true},
62
+ ReactTestRenderer.act(() =>
63
+ ReactTestRenderer.create(
64
+ <React.unstable_DebugTracingMode>
65
+ <div />
66
+ </React.unstable_DebugTracingMode>,
67
+ {unstable_isConcurrent: true},
68
+ ),
69
);
67
-
68
- expect(logs).toEqual([]);
69
-
70
- logs.splice(0);
71
-
72
- expect(Scheduler).toFlushUntilNextPaint([]);
73
-
70
expect(logs).toEqual([]);
71
});
72
77
throw fakeSuspensePromise;
78
}
79
84
- ReactTestRenderer.create(
85
- <React.unstable_DebugTracingMode>
86
- <React.Suspense fallback={null}>
87
- <Example />
88
- </React.Suspense>
89
- </React.unstable_DebugTracingMode>,
80
+ ReactTestRenderer.act(() =>
81
+ ReactTestRenderer.create(
82
+ <React.unstable_DebugTracingMode>
83
+ <React.Suspense fallback={null}>
84
+ <Example />
85
+ </React.Suspense>
86
+ </React.unstable_DebugTracingMode>,
87
+ ),
88
);
89
90
expect(logs).toEqual([
140
141
// @gate experimental && build === 'development' && enableDebugTracing
142
it('should log concurrent render with suspense', async () => {
145
- const fakeSuspensePromise = Promise.resolve(true);
143
+ let isResolved = false;
144
+ let resolveFakeSuspensePromise;
145
+ const fakeSuspensePromise = new Promise(resolve => {
146
+ resolveFakeSuspensePromise = () => {
147
+ resolve();
148
+ isResolved = true;
149
+ };
150
+ });
151
+
152
function Example() {
147
- throw fakeSuspensePromise;
153
+ if (!isResolved) {
154
+ throw fakeSuspensePromise;
155
+ }
156
+ return null;
157
}
158
150
- ReactTestRenderer.create(
151
- <React.unstable_DebugTracingMode>
152
- <React.Suspense fallback={null}>
153
- <Example />
154
- </React.Suspense>
155
- </React.unstable_DebugTracingMode>,
156
- {unstable_isConcurrent: true},
159
+ ReactTestRenderer.act(() =>
160
+ ReactTestRenderer.create(
161
+ <React.unstable_DebugTracingMode>
162
+ <React.Suspense fallback={null}>
163
+ <Example />
164
+ </React.Suspense>
165
+ </React.unstable_DebugTracingMode>,
166
+ {unstable_isConcurrent: true},
167
+ ),
168
);
169
159
- expect(logs).toEqual([]);
160
-
161
- logs.splice(0);
162
-
163
- expect(Scheduler).toFlushUntilNextPaint([]);
164
-
170
expect(logs).toEqual([
171
`group: ⚛️ render (${DEFAULT_LANE_STRING})`,
172
'log: ⚛️ Example suspended',
175
176
logs.splice(0);
177
173
- await fakeSuspensePromise;
178
+ await ReactTestRenderer.act(async () => await resolveFakeSuspensePromise());
179
expect(logs).toEqual(['log: ⚛️ Example resolved']);
180
});
181
191
return children;
192
}
193
189
- ReactTestRenderer.create(
190
- <React.unstable_DebugTracingMode>
191
- <Wrapper>
192
- <React.Suspense fallback={null} unstable_expectedLoadTime={1}>
193
- <Example />
194
- </React.Suspense>
195
- </Wrapper>
196
- </React.unstable_DebugTracingMode>,
197
- {unstable_isConcurrent: true},
194
+ ReactTestRenderer.act(() =>
195
+ ReactTestRenderer.create(
196
+ <React.unstable_DebugTracingMode>
197
+ <Wrapper>
198
+ <React.Suspense fallback={null} unstable_expectedLoadTime={1}>
199
+ <Example />
200
+ </React.Suspense>
201
+ </Wrapper>
202
+ </React.unstable_DebugTracingMode>,
203
+ {unstable_isConcurrent: true},
204
+ ),
205
);
206
200
- expect(logs).toEqual([]);
201
-
202
- logs.splice(0);
203
-
204
- expect(Scheduler).toFlushUntilNextPaint([]);
205
-
207
expect(logs).toEqual([
208
`group: ⚛️ render (${DEFAULT_LANE_STRING})`,
209
'log: <Wrapper/>',
210
`groupEnd: ⚛️ render (${DEFAULT_LANE_STRING})`,
210
- ]);
211
-
212
- logs.splice(0);
213
-
214
- expect(Scheduler).toFlushUntilNextPaint([]);
215
-
216
- expect(logs).toEqual([
211
`group: ⚛️ render (${RETRY_LANE_STRING})`,
212
'log: <Example/>',
213
`groupEnd: ⚛️ render (${RETRY_LANE_STRING})`,
226
}
227
}
228
235
- ReactTestRenderer.create(
236
- <React.unstable_DebugTracingMode>
237
- <Example />
238
- </React.unstable_DebugTracingMode>,
239
- {unstable_isConcurrent: true},
229
+ ReactTestRenderer.act(() =>
230
+ ReactTestRenderer.create(
231
+ <React.unstable_DebugTracingMode>
232
+ <Example />
233
+ </React.unstable_DebugTracingMode>,
234
+ {unstable_isConcurrent: true},
235
+ ),
236
);
237
242
- expect(logs).toEqual([]);
243
-
244
- logs.splice(0);
245
-
246
- expect(Scheduler).toFlushUntilNextPaint([]);
247
-
238
expect(logs).toEqual([
239
`group: ⚛️ commit (${DEFAULT_LANE_STRING})`,
240
`group: ⚛️ layout effects (${DEFAULT_LANE_STRING})`,
256
}
257
}
258
269
- ReactTestRenderer.create(
270
- <React.unstable_DebugTracingMode>
271
- <Example />
272
- </React.unstable_DebugTracingMode>,
273
- {unstable_isConcurrent: true},
274
- );
275
-
276
- expect(logs).toEqual([]);
277
-
278
- logs.splice(0);
279
-
259
expect(() => {
281
- expect(Scheduler).toFlushUntilNextPaint([]);
260
+ ReactTestRenderer.act(() =>
261
+ ReactTestRenderer.create(
262
+ <React.unstable_DebugTracingMode>
263
+ <Example />
264
+ </React.unstable_DebugTracingMode>,
265
+ {unstable_isConcurrent: true},
266
+ ),
267
+ );
268
}).toErrorDev('Cannot update during an existing state transition');
269
270
expect(logs).toEqual([
284
return didMount;
285
}
286
301
- ReactTestRenderer.create(
302
- <React.unstable_DebugTracingMode>
303
- <Example />
304
- </React.unstable_DebugTracingMode>,
305
- {unstable_isConcurrent: true},
287
+ ReactTestRenderer.act(() =>
288
+ ReactTestRenderer.create(
289
+ <React.unstable_DebugTracingMode>
290
+ <Example />
291
+ </React.unstable_DebugTracingMode>,
292
+ {unstable_isConcurrent: true},
293
+ ),
294
);
295
308
- expect(logs).toEqual([]);
309
-
310
- logs.splice(0);
311
-
312
- expect(Scheduler).toFlushUntilNextPaint([]);
313
-
296
expect(logs).toEqual([
297
`group: ⚛️ commit (${DEFAULT_LANE_STRING})`,
298
`group: ⚛️ layout effects (${DEFAULT_LANE_STRING})`,
360
return null;
361
}
362
381
- ReactTestRenderer.create(
382
- <React.unstable_DebugTracingMode>
383
- <Example />
384
- </React.unstable_DebugTracingMode>,
385
- {unstable_isConcurrent: true},
363
+ ReactTestRenderer.act(() =>
364
+ ReactTestRenderer.create(
365
+ <React.unstable_DebugTracingMode>
366
+ <Example />
367
+ </React.unstable_DebugTracingMode>,
368
+ {unstable_isConcurrent: true},
369
+ ),
370
);
371
388
- expect(logs).toEqual([]);
389
-
390
- logs.splice(0);
391
-
392
- expect(Scheduler).toFlushUntilNextPaint([]);
393
-
372
expect(logs).toEqual([
373
`group: ⚛️ render (${DEFAULT_LANE_STRING})`,
374
'log: Hello from user code',
376
]);
377
});
378
379
+ // @gate build === 'development'
380
// @gate experimental || www
381
it('should not log anything outside of a unstable_DebugTracingMode subtree', () => {
382
function ExampleThatCascades() {
396
return null;
397
}
398
420
- ReactTestRenderer.create(
421
- <React.Fragment>
422
- <ExampleThatCascades />
423
- <React.Suspense fallback={null}>
424
- <ExampleThatSuspends />
425
- </React.Suspense>
426
- <React.unstable_DebugTracingMode>
427
- <Example />
428
- </React.unstable_DebugTracingMode>
429
- </React.Fragment>,
399
+ ReactTestRenderer.act(() =>
400
+ ReactTestRenderer.create(
401
+ <React.Fragment>
402
+ <ExampleThatCascades />
403
+ <React.Suspense fallback={null}>
404
+ <ExampleThatSuspends />
405
+ </React.Suspense>
406
+ <React.unstable_DebugTracingMode>
407
+ <Example />
408
+ </React.unstable_DebugTracingMode>
409
+ </React.Fragment>,
410
+ ),
411
);
412
413
expect(logs).toEqual([]);