test: add test case for proper effect teardown w/ withAsyncContext
This commit is contained in:
		
							parent
							
								
									6fad2093a4
								
							
						
					
					
						commit
						d12206db8e
					
				@ -9,7 +9,9 @@ import {
 | 
				
			|||||||
  render,
 | 
					  render,
 | 
				
			||||||
  serializeInner,
 | 
					  serializeInner,
 | 
				
			||||||
  SetupContext,
 | 
					  SetupContext,
 | 
				
			||||||
  Suspense
 | 
					  Suspense,
 | 
				
			||||||
 | 
					  computed,
 | 
				
			||||||
 | 
					  ComputedRef
 | 
				
			||||||
} from '@vue/runtime-test'
 | 
					} from '@vue/runtime-test'
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
  defineEmits,
 | 
					  defineEmits,
 | 
				
			||||||
@ -253,5 +255,35 @@ describe('SFC <script setup> helpers', () => {
 | 
				
			|||||||
      await ready
 | 
					      await ready
 | 
				
			||||||
      expect(getCurrentInstance()).toBeNull()
 | 
					      expect(getCurrentInstance()).toBeNull()
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    test('should teardown in-scope effects', async () => {
 | 
				
			||||||
 | 
					      let resolve: (val?: any) => void
 | 
				
			||||||
 | 
					      const ready = new Promise(r => {
 | 
				
			||||||
 | 
					        resolve = r
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      let c: ComputedRef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const Comp = defineComponent({
 | 
				
			||||||
 | 
					        async setup() {
 | 
				
			||||||
 | 
					          await withAsyncContext(Promise.resolve())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          c = computed(() => {})
 | 
				
			||||||
 | 
					          // register the lifecycle after an await statement
 | 
				
			||||||
 | 
					          onMounted(resolve)
 | 
				
			||||||
 | 
					          return () => ''
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const app = createApp(() => h(Suspense, () => h(Comp)))
 | 
				
			||||||
 | 
					      const root = nodeOps.createElement('div')
 | 
				
			||||||
 | 
					      app.mount(root)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      await ready
 | 
				
			||||||
 | 
					      expect(c!.effect.active).toBe(true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      app.unmount()
 | 
				
			||||||
 | 
					      expect(c!.effect.active).toBe(false)
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user