@@ -1215,6 +1215,83 @@ describe('e2e: Transition', () => {
12151215 E2E_TIMEOUT ,
12161216 )
12171217
1218+ // issue https://github.com/vuejs/core/issues/7649
1219+ test (
1220+ 'transition with v-if at component root-level' ,
1221+ async ( ) => {
1222+ await page ( ) . evaluate ( ( ) => {
1223+ const { createApp, ref } = ( window as any ) . Vue
1224+ createApp ( {
1225+ template : `
1226+ <div id="container">
1227+ <transition name="test" mode="out-in">
1228+ <component class="test" :is="view"></component>
1229+ </transition>
1230+ </div>
1231+ <button id="toggleBtn" @click="click">button</button>
1232+ <button id="changeViewBtn" @click="change">button</button>
1233+ ` ,
1234+ components : {
1235+ one : {
1236+ template : '<div v-if="false">one</div>' ,
1237+ } ,
1238+ two : {
1239+ template : '<div>two</div>' ,
1240+ } ,
1241+ } ,
1242+ setup : ( ) => {
1243+ const toggle = ref ( true )
1244+ const view = ref ( 'one' )
1245+ const click = ( ) => ( toggle . value = ! toggle . value )
1246+ const change = ( ) =>
1247+ ( view . value = view . value === 'one' ? 'two' : 'one' )
1248+ return { toggle, click, change, view }
1249+ } ,
1250+ } ) . mount ( '#app' )
1251+ } )
1252+ expect ( await html ( '#container' ) ) . toBe ( '<!--v-if-->' )
1253+
1254+ // change view -> 'two'
1255+ await page ( ) . evaluate ( ( ) => {
1256+ ; ( document . querySelector ( '#changeViewBtn' ) as any ) ! . click ( )
1257+ } )
1258+ // enter
1259+ expect ( await classWhenTransitionStart ( ) ) . toStrictEqual ( [
1260+ 'test' ,
1261+ 'test-enter-from' ,
1262+ 'test-enter-active' ,
1263+ ] )
1264+ await nextFrame ( )
1265+ expect ( await classList ( '.test' ) ) . toStrictEqual ( [
1266+ 'test' ,
1267+ 'test-enter-active' ,
1268+ 'test-enter-to' ,
1269+ ] )
1270+ await transitionFinish ( )
1271+ expect ( await html ( '#container' ) ) . toBe ( '<div class="test">two</div>' )
1272+
1273+ // change view -> 'one'
1274+ await page ( ) . evaluate ( ( ) => {
1275+ ; ( document . querySelector ( '#changeViewBtn' ) as any ) ! . click ( )
1276+ } )
1277+ // leave
1278+ expect ( await classWhenTransitionStart ( ) ) . toStrictEqual ( [
1279+ 'test' ,
1280+ 'test-leave-from' ,
1281+ 'test-leave-active' ,
1282+ ] )
1283+ await nextFrame ( )
1284+ expect ( await classList ( '.test' ) ) . toStrictEqual ( [
1285+ 'test' ,
1286+ 'test-leave-active' ,
1287+ 'test-leave-to' ,
1288+ ] )
1289+ await transitionFinish ( )
1290+ expect ( await html ( '#container' ) ) . toBe ( '<!--v-if-->' )
1291+ } ,
1292+ E2E_TIMEOUT ,
1293+ )
1294+
12181295 // #3716
12191296 test (
12201297 'wrapping transition + fallthrough attrs' ,
0 commit comments