Skip to content

Commit f62bebe

Browse files
committed
.
1 parent 804fd7b commit f62bebe

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

src/__tests__/suspense-fake-timers.test.tsx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,31 @@ function Suspending({ promise }: { promise: Promise<unknown> }) {
1212
return <View testID="content" />;
1313
}
1414

15+
testGateReact19('resolves manually-controlled promise', async () => {
16+
let resolvePromise: (value: unknown) => void;
17+
const promise = new Promise((resolve) => {
18+
resolvePromise = resolve;
19+
});
20+
21+
await renderAsync(
22+
<View>
23+
<React.Suspense fallback={<Text>Loading...</Text>}>
24+
<Suspending promise={promise} />
25+
<View testID="sibling" />
26+
</React.Suspense>
27+
</View>,
28+
);
29+
expect(screen.getByText('Loading...')).toBeOnTheScreen();
30+
expect(screen.queryByTestId('content')).not.toBeOnTheScreen();
31+
expect(screen.queryByTestId('sibling')).not.toBeOnTheScreen();
32+
33+
// eslint-disable-next-line require-await
34+
await act(async () => resolvePromise(null));
35+
expect(screen.getByTestId('content')).toBeOnTheScreen();
36+
expect(screen.getByTestId('sibling')).toBeOnTheScreen();
37+
expect(screen.queryByText('Loading...')).not.toBeOnTheScreen();
38+
});
39+
1540
testGateReact19('resolves timer-controlled promise', async () => {
1641
const promise = new Promise((resolve) => {
1742
setTimeout(() => resolve(null), 100);

src/__tests__/suspense.test.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ function Suspending({ promise }: { promise: Promise<unknown> }) {
1111
}
1212

1313
testGateReact19('resolves manually-controlled promise', async () => {
14-
let resolvePromise: (value: void) => void;
14+
let resolvePromise: (value: unknown) => void;
1515
const promise = new Promise((resolve) => {
1616
resolvePromise = resolve;
1717
});
@@ -28,7 +28,8 @@ testGateReact19('resolves manually-controlled promise', async () => {
2828
expect(screen.queryByTestId('content')).not.toBeOnTheScreen();
2929
expect(screen.queryByTestId('sibling')).not.toBeOnTheScreen();
3030

31-
await act(async () => resolvePromise());
31+
// eslint-disable-next-line require-await
32+
await act(async () => resolvePromise(null));
3233
expect(screen.getByTestId('content')).toBeOnTheScreen();
3334
expect(screen.getByTestId('sibling')).toBeOnTheScreen();
3435
expect(screen.queryByText('Loading...')).not.toBeOnTheScreen();

0 commit comments

Comments
 (0)