@@ -221,6 +221,57 @@ describe('Suspense', () => {
221
221
] )
222
222
} )
223
223
224
+ // #1059
225
+ test ( 'mounted/updated hooks & fallback component' , async ( ) => {
226
+ const deps : Promise < any > [ ] = [ ]
227
+ const calls : string [ ] = [ ]
228
+ const toggle = ref ( true )
229
+
230
+ const Async = {
231
+ async setup ( ) {
232
+ const p = new Promise ( r => setTimeout ( r , 1 ) )
233
+ // extra tick needed for Node 12+
234
+ deps . push ( p . then ( ( ) => Promise . resolve ( ) ) )
235
+
236
+ await p
237
+ return ( ) => h ( 'div' , 'async' )
238
+ }
239
+ }
240
+
241
+ const Fallback = {
242
+ setup ( ) {
243
+ onMounted ( ( ) => {
244
+ calls . push ( 'mounted' )
245
+ } )
246
+
247
+ onUnmounted ( ( ) => {
248
+ calls . push ( 'unmounted' )
249
+ } )
250
+ return ( ) => h ( 'div' , 'fallback' )
251
+ }
252
+ }
253
+
254
+ const Comp = {
255
+ setup ( ) {
256
+ return ( ) =>
257
+ h ( Suspense , null , {
258
+ default : toggle . value ? h ( Async ) : null ,
259
+ fallback : h ( Fallback )
260
+ } )
261
+ }
262
+ }
263
+
264
+ const root = nodeOps . createElement ( 'div' )
265
+ render ( h ( Comp ) , root )
266
+ expect ( serializeInner ( root ) ) . toBe ( `<div>fallback</div>` )
267
+ expect ( calls ) . toEqual ( [ `mounted` ] )
268
+
269
+ await Promise . all ( deps )
270
+ await nextTick ( )
271
+ expect ( serializeInner ( root ) ) . toBe ( `<div>async</div>` )
272
+ expect ( calls ) . toEqual ( [ `mounted` , `unmounted` ] )
273
+ } )
274
+
224
275
test ( 'content update before suspense resolve' , async ( ) => {
225
276
const Async = defineAsyncComponent ( {
226
277
props : { msg : String } ,
@@ -316,7 +367,7 @@ describe('Suspense', () => {
316
367
await nextTick ( )
317
368
expect ( serializeInner ( root ) ) . toBe ( `<!---->` )
318
369
// should discard effects (except for immediate ones)
319
- expect ( calls ) . toEqual ( [ 'immediate effect' ] )
370
+ expect ( calls ) . toEqual ( [ 'immediate effect' , 'watch callback' , 'unmounted' ] )
320
371
} )
321
372
322
373
test ( 'unmount suspense after resolve' , async ( ) => {
0 commit comments