@@ -2021,7 +2021,7 @@ describe('Suspense', () => {
2021
2021
viewRef . value = 0
2022
2022
await nextTick ( )
2023
2023
2024
- expect ( serializeInner ( root ) ) . toBe ( '<!---- >' )
2024
+ expect ( serializeInner ( root ) ) . toBe ( '<div>sync</div >' )
2025
2025
2026
2026
await Promise . all ( deps )
2027
2027
await nextTick ( )
@@ -2035,6 +2035,56 @@ describe('Suspense', () => {
2035
2035
expect ( serializeInner ( root ) ) . toBe ( `<div>sync</div>` )
2036
2036
} )
2037
2037
2038
+ // #10899
2039
+ test ( 'KeepAlive + Suspense switch before branch resolves' , async ( ) => {
2040
+ const Async1 = defineAsyncComponent ( {
2041
+ render ( ) {
2042
+ return h ( 'div' , 'async1' )
2043
+ } ,
2044
+ } )
2045
+ const Async2 = defineAsyncComponent ( {
2046
+ render ( ) {
2047
+ return h ( 'div' , 'async2' )
2048
+ } ,
2049
+ } )
2050
+ const components = [ Async1 , Async2 ]
2051
+ const viewRef = ref ( 0 )
2052
+ const root = nodeOps . createElement ( 'div' )
2053
+ const App = {
2054
+ render ( ) {
2055
+ return h ( KeepAlive , null , {
2056
+ default : ( ) => {
2057
+ return h ( Suspense , null , {
2058
+ default : h ( components [ viewRef . value ] ) ,
2059
+ fallback : h ( 'div' , 'loading' ) ,
2060
+ } )
2061
+ } ,
2062
+ } )
2063
+ } ,
2064
+ }
2065
+ render ( h ( App ) , root )
2066
+ expect ( serializeInner ( root ) ) . toBe ( `<div>loading</div>` )
2067
+
2068
+ // switch to Async2 before Async1 resolves
2069
+ viewRef . value = 1
2070
+ await nextTick ( )
2071
+ expect ( serializeInner ( root ) ) . toBe ( `<div>loading</div>` )
2072
+
2073
+ await Promise . all ( deps )
2074
+ await nextTick ( )
2075
+ expect ( serializeInner ( root ) ) . toBe ( '<div>async2</div>' )
2076
+
2077
+ viewRef . value = 0
2078
+ await nextTick ( )
2079
+ await Promise . all ( deps )
2080
+ expect ( serializeInner ( root ) ) . toBe ( `<div>async1</div>` )
2081
+
2082
+ viewRef . value = 1
2083
+ await nextTick ( )
2084
+ await Promise . all ( deps )
2085
+ expect ( serializeInner ( root ) ) . toBe ( `<div>async2</div>` )
2086
+ } )
2087
+
2038
2088
// #6416 follow up / #10017
2039
2089
test ( 'Suspense patched during HOC async component re-mount' , async ( ) => {
2040
2090
const key = ref ( 'k' )
0 commit comments