diff --git a/packages/react-dom/src/__tests__/ReactDOMFizzServerNode-test.js b/packages/react-dom/src/__tests__/ReactDOMFizzServerNode-test.js
index b6a111fce4012..a453e0347d8d5 100644
--- a/packages/react-dom/src/__tests__/ReactDOMFizzServerNode-test.js
+++ b/packages/react-dom/src/__tests__/ReactDOMFizzServerNode-test.js
@@ -464,4 +464,62 @@ describe('ReactDOMFizzServer', () => {
expect(output1.result).not.toContain('context never found');
expect(output1.result).toContain('OK');
});
+
+ // @gate experimental
+ it('should be able to pop context after suspending', async () => {
+ class DelayClient {
+ get() {
+ if (this.resolved) return this.resolved;
+ if (this.pending) return this.pending;
+ return (this.pending = new Promise(resolve => {
+ setTimeout(() => {
+ delete this.pending;
+ this.resolved = 'OK';
+ resolve();
+ }, 500);
+ }));
+ }
+ }
+
+ const DelayContext = React.createContext(undefined);
+ const Component = () => {
+ const client = React.useContext(DelayContext);
+ if (!client) {
+ return 'context not found.';
+ }
+ const result = client.get();
+ if (typeof result === 'string') {
+ return result;
+ }
+ throw result;
+ };
+
+ const client = new DelayClient();
+ const {writable, output, completed} = getTestWritable();
+ ReactDOMFizzServer.renderToPipeableStream(
+ <>
+
+
+
+
+
+
+
+
+
+
+ >,
+ ).pipe(writable);
+
+ jest.runAllTimers();
+
+ expect(output.error).toBe(undefined);
+ expect(output.result).toContain('loading');
+
+ await completed;
+
+ expect(output.error).toBe(undefined);
+ expect(output.result).not.toContain('context never found');
+ expect(output.result).toContain('OK');
+ });
});