@@ -110,7 +110,39 @@ describe("Testing Context", () => {
110110 expect ( div . children [ 1 ] . innerHTML ) . toBe ( "dark" ) ;
111111 } ) ;
112112
113- const ThemeContextWithoutDefault = createContext < string > ( ) ;
113+ const ThemeContextWithUndefined = createContext < string | undefined > ( "light" ) ;
114+ const ComponentWithUndefined = ( ) => {
115+ const theme = useContext ( ThemeContextWithUndefined ) ;
116+ // ?? 'undefined' will never get reached
117+ return < div > { theme ?? "undefined" } </ div > ;
118+ } ;
119+
120+ it ( "should override when nesting" , ( ) => {
121+ const div = document . createElement ( "div" ) ;
122+ render (
123+ ( ) => (
124+ < >
125+ < ComponentWithUndefined />
126+ < ThemeContextWithUndefined . Provider value = "dark" >
127+ < ComponentWithUndefined />
128+ < ThemeContextWithUndefined . Provider value = "darker" >
129+ < ComponentWithUndefined />
130+ < ThemeContextWithUndefined . Provider value = { undefined } >
131+ < ComponentWithUndefined />
132+ </ ThemeContextWithUndefined . Provider >
133+ </ ThemeContextWithUndefined . Provider >
134+ </ ThemeContextWithUndefined . Provider >
135+ </ >
136+ ) ,
137+ div
138+ ) ;
139+ expect ( div . children [ 0 ] . innerHTML ! ) . toBe ( "light" ) ;
140+ expect ( div . children [ 1 ] . innerHTML ! ) . toBe ( "dark" ) ;
141+ expect ( div . children [ 2 ] . innerHTML ! ) . toBe ( "darker" ) ;
142+ expect ( div . children [ 3 ] . innerHTML ! ) . toBe ( "light" ) ;
143+ } ) ;
144+
145+ const ThemeContextWithoutDefault = createContext < string | undefined > ( ) ;
114146 const ComponentWithoutDefault = ( ) => {
115147 const theme = useContext ( ThemeContextWithoutDefault ) ;
116148 return < div > { theme ?? "no-default" } </ div > ;
@@ -124,12 +156,16 @@ describe("Testing Context", () => {
124156 < ComponentWithoutDefault />
125157 < ThemeContextWithoutDefault . Provider value = "dark" >
126158 < ComponentWithoutDefault />
159+ < ThemeContextWithoutDefault . Provider value = { undefined } >
160+ < ComponentWithoutDefault />
161+ </ ThemeContextWithoutDefault . Provider >
127162 </ ThemeContextWithoutDefault . Provider >
128163 </ >
129164 ) ,
130165 div
131166 ) ;
132167 expect ( div . children [ 0 ] . innerHTML ! ) . toBe ( "no-default" ) ;
133168 expect ( div . children [ 1 ] . innerHTML ! ) . toBe ( "dark" ) ;
169+ expect ( div . children [ 2 ] . innerHTML ! ) . toBe ( "no-default" ) ;
134170 } ) ;
135171} ) ;
0 commit comments