diff --git a/packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js b/packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js
index 8c709cb593971..a048811925c33 100644
--- a/packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js
+++ b/packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js
@@ -1778,5 +1778,57 @@ describe('ReactSuspense', () => {
expect(Scheduler).toFlushExpired(['new value']);
expect(root).toMatchRenderedOutput('new value');
});
+
+ it('updates context consumer within child of suspended suspense component when context updates', () => {
+ const {createContext, useState} = React;
+
+ const ValueContext = createContext(null);
+
+ const promiseThatNeverResolves = new Promise(() => {});
+ function Child() {
+ return (
+
+ {value => {
+ Scheduler.unstable_yieldValue(`Received context value [${value}]`);
+ if (value === 'default') return ;
+ throw promiseThatNeverResolves;
+ }}
+
+ );
+ }
+
+ let setValue;
+ function Wrapper({children}) {
+ const [value, _setValue] = useState('default');
+ setValue = _setValue;
+ return (
+
+ {children}
+
+ );
+ }
+
+ function App() {
+ return (
+
+ }>
+
+
+
+ );
+ }
+
+ const root = ReactTestRenderer.create();
+ expect(Scheduler).toHaveYielded(['Received context value [default]', 'default']);
+ expect(root).toMatchRenderedOutput('default');
+
+ act(() => setValue('new value'));
+ expect(Scheduler).toHaveYielded(['Received context value [new value]', 'Loading...']);
+ expect(root).toMatchRenderedOutput('Loading...');
+
+ act(() => setValue('default'));
+ expect(Scheduler).toHaveYielded(['Received context value [default]', 'default']);
+ expect(root).toMatchRenderedOutput('default');
+ });
});
});