@@ -305,6 +305,56 @@ describe('DtPopover Tests', () => {
305305 } ) ;
306306 } ) ;
307307
308+ describe ( 'When component is unmounting' , ( ) => {
309+ beforeEach ( ( ) => {
310+ wrapper . vm . _isUnmounting = true ;
311+ } ) ;
312+
313+ it ( 'sets transition: none on content element to cancel in-flight transitions' , ( ) => {
314+ const contentEl = wrapper . vm . popoverContentEl ;
315+ wrapper . unmount ( ) ;
316+ expect ( contentEl . style . transition ) . toBe ( 'none' ) ;
317+ } ) ;
318+
319+ it ( 'does not emit "opened" when leave transition completes' , async ( ) => {
320+ await wrapper . vm . onLeaveTransitionComplete ( ) ;
321+ expect ( wrapper . emitted ( 'opened' ) ) . toBeUndefined ( ) ;
322+ } ) ;
323+
324+ it ( 'emits "opened" and respects open prop when leave transition completes and not unmounting' , async ( ) => {
325+ wrapper . vm . _isUnmounting = false ;
326+ await wrapper . vm . onLeaveTransitionComplete ( ) ;
327+ expect ( wrapper . emitted ( 'opened' ) ) . toBeDefined ( ) ;
328+ expect ( wrapper . emitted ( 'opened' ) [ 0 ] ) . toEqual ( [ false ] ) ;
329+ // uncontrolled (open === null): update:open is not emitted
330+ expect ( wrapper . emitted ( 'update:open' ) ) . toBeUndefined ( ) ;
331+ // controlled (open !== null): update:open is emitted
332+ await wrapper . setProps ( { open : false } ) ;
333+ await wrapper . vm . onLeaveTransitionComplete ( ) ;
334+ expect ( wrapper . emitted ( 'update:open' ) ) . toBeDefined ( ) ;
335+ expect ( wrapper . emitted ( 'update:open' ) [ 0 ] ) . toEqual ( [ false ] ) ;
336+ } ) ;
337+
338+ it ( 'does not emit "opened" when enter transition completes' , async ( ) => {
339+ await wrapper . vm . onEnterTransitionComplete ( ) ;
340+ expect ( wrapper . emitted ( 'opened' ) ) . toBeUndefined ( ) ;
341+ } ) ;
342+
343+ it ( 'emits "opened" and respects open prop when enter transition completes and not unmounting' , async ( ) => {
344+ wrapper . vm . _isUnmounting = false ;
345+ await wrapper . vm . onEnterTransitionComplete ( ) ;
346+ expect ( wrapper . emitted ( 'opened' ) ) . toBeDefined ( ) ;
347+ expect ( wrapper . emitted ( 'opened' ) [ 0 ] [ 0 ] ) . toBe ( true ) ;
348+ // uncontrolled (open === null): update:open is not emitted
349+ expect ( wrapper . emitted ( 'update:open' ) ) . toBeUndefined ( ) ;
350+ // controlled (open !== null): update:open is emitted
351+ await wrapper . setProps ( { open : false } ) ;
352+ await wrapper . vm . onEnterTransitionComplete ( ) ;
353+ expect ( wrapper . emitted ( 'update:open' ) ) . toBeDefined ( ) ;
354+ expect ( wrapper . emitted ( 'update:open' ) [ 0 ] ) . toEqual ( [ true ] ) ;
355+ } ) ;
356+ } ) ;
357+
308358 describe ( 'When anchor slot content changes' , ( ) => {
309359 it ( 'should attach the tippy instance to the new DOM node' , async ( ) => {
310360 const component = {
0 commit comments