@@ -1142,6 +1142,83 @@ describe('e2e: Transition', () => {
1142
1142
1143
1143
test (
1144
1144
'transition on child components with empty root node' ,
1145
+ async ( ) => {
1146
+ await page ( ) . evaluate ( ( ) => {
1147
+ const { createApp, ref } = ( window as any ) . Vue
1148
+ createApp ( {
1149
+ template : `
1150
+ <div id="container">
1151
+ <transition name="test">
1152
+ <component class="test" :is="view"></component>
1153
+ </transition>
1154
+ </div>
1155
+ <button id="toggleBtn" @click="click">button</button>
1156
+ <button id="changeViewBtn" @click="change">button</button>
1157
+ ` ,
1158
+ components : {
1159
+ one : {
1160
+ template : '<div v-if="false">one</div>'
1161
+ } ,
1162
+ two : {
1163
+ template : '<div>two</div>'
1164
+ }
1165
+ } ,
1166
+ setup : ( ) => {
1167
+ const toggle = ref ( true )
1168
+ const view = ref ( 'one' )
1169
+ const click = ( ) => ( toggle . value = ! toggle . value )
1170
+ const change = ( ) =>
1171
+ ( view . value = view . value === 'one' ? 'two' : 'one' )
1172
+ return { toggle, click, change, view }
1173
+ }
1174
+ } ) . mount ( '#app' )
1175
+ } )
1176
+ expect ( await html ( '#container' ) ) . toBe ( '<!--v-if-->' )
1177
+
1178
+ // change view -> 'two'
1179
+ await page ( ) . evaluate ( ( ) => {
1180
+ ; ( document . querySelector ( '#changeViewBtn' ) as any ) ! . click ( )
1181
+ } )
1182
+ // enter
1183
+ expect ( await classWhenTransitionStart ( ) ) . toStrictEqual ( [
1184
+ 'test' ,
1185
+ 'test-enter-from' ,
1186
+ 'test-enter-active'
1187
+ ] )
1188
+ await nextFrame ( )
1189
+ expect ( await classList ( '.test' ) ) . toStrictEqual ( [
1190
+ 'test' ,
1191
+ 'test-enter-active' ,
1192
+ 'test-enter-to'
1193
+ ] )
1194
+ await transitionFinish ( )
1195
+ expect ( await html ( '#container' ) ) . toBe ( '<div class="test">two</div>' )
1196
+
1197
+ // change view -> 'one'
1198
+ await page ( ) . evaluate ( ( ) => {
1199
+ ; ( document . querySelector ( '#changeViewBtn' ) as any ) ! . click ( )
1200
+ } )
1201
+ // leave
1202
+ expect ( await classWhenTransitionStart ( ) ) . toStrictEqual ( [
1203
+ 'test' ,
1204
+ 'test-leave-from' ,
1205
+ 'test-leave-active'
1206
+ ] )
1207
+ await nextFrame ( )
1208
+ expect ( await classList ( '.test' ) ) . toStrictEqual ( [
1209
+ 'test' ,
1210
+ 'test-leave-active' ,
1211
+ 'test-leave-to'
1212
+ ] )
1213
+ await transitionFinish ( )
1214
+ expect ( await html ( '#container' ) ) . toBe ( '<!--v-if-->' )
1215
+ } ,
1216
+ E2E_TIMEOUT
1217
+ )
1218
+
1219
+ // issue https://github.com/vuejs/core/issues/7649
1220
+ test (
1221
+ 'transition with v-if at component root-level' ,
1145
1222
async ( ) => {
1146
1223
await page ( ) . evaluate ( ( ) => {
1147
1224
const { createApp, ref } = ( window as any ) . Vue
0 commit comments