@@ -328,7 +328,6 @@ describe('e2e: Transition', () => {
328
328
'test-leave-from' ,
329
329
'test-leave-active'
330
330
] )
331
- // todo test event with arguments. Note: not get dom, get object. '{}'
332
331
expect ( beforeLeaveSpy ) . toBeCalled ( )
333
332
expect ( onLeaveSpy ) . toBeCalled ( )
334
333
expect ( afterLeaveSpy ) . not . toBeCalled ( )
@@ -366,6 +365,122 @@ describe('e2e: Transition', () => {
366
365
E2E_TIMEOUT
367
366
)
368
367
368
+ test (
369
+ 'events with arguments' ,
370
+ async ( ) => {
371
+ const beforeLeaveSpy = jest . fn ( )
372
+ const onLeaveSpy = jest . fn ( )
373
+ const afterLeaveSpy = jest . fn ( )
374
+ const beforeEnterSpy = jest . fn ( )
375
+ const onEnterSpy = jest . fn ( )
376
+ const afterEnterSpy = jest . fn ( )
377
+
378
+ await page ( ) . exposeFunction ( 'onLeaveSpy' , onLeaveSpy )
379
+ await page ( ) . exposeFunction ( 'onEnterSpy' , onEnterSpy )
380
+ await page ( ) . exposeFunction ( 'beforeLeaveSpy' , beforeLeaveSpy )
381
+ await page ( ) . exposeFunction ( 'beforeEnterSpy' , beforeEnterSpy )
382
+ await page ( ) . exposeFunction ( 'afterLeaveSpy' , afterLeaveSpy )
383
+ await page ( ) . exposeFunction ( 'afterEnterSpy' , afterEnterSpy )
384
+
385
+ await page ( ) . evaluate ( ( ) => {
386
+ const {
387
+ beforeEnterSpy,
388
+ onEnterSpy,
389
+ afterEnterSpy,
390
+ beforeLeaveSpy,
391
+ onLeaveSpy,
392
+ afterLeaveSpy
393
+ } = window as any
394
+ const { createApp, ref } = ( window as any ) . Vue
395
+ createApp ( {
396
+ template : `
397
+ <div id="container">
398
+ <transition
399
+ :css="false"
400
+ name="test"
401
+ @before-enter="beforeEnterSpy"
402
+ @enter="onEnterSpy"
403
+ @after-enter="afterEnterSpy"
404
+ @before-leave="beforeLeaveSpy"
405
+ @leave="onLeaveSpy"
406
+ @after-leave="afterLeaveSpy">
407
+ <div v-if="toggle" class="test">content</div>
408
+ </transition>
409
+ </div>
410
+ <button id="toggleBtn" @click="click">button</button>
411
+ ` ,
412
+ setup : ( ) => {
413
+ const toggle = ref ( true )
414
+ const click = ( ) => ( toggle . value = ! toggle . value )
415
+ return {
416
+ toggle,
417
+ click,
418
+ beforeEnterSpy ( el : Element ) {
419
+ beforeEnterSpy ( )
420
+ el . classList . add ( 'before-enter' )
421
+ } ,
422
+ onEnterSpy ( el : Element , done : ( ) => void ) {
423
+ onEnterSpy ( )
424
+ el . classList . add ( 'enter' )
425
+ setTimeout ( done , 200 )
426
+ } ,
427
+ afterEnterSpy ( el : Element ) {
428
+ afterEnterSpy ( )
429
+ el . classList . add ( 'after-enter' )
430
+ } ,
431
+ beforeLeaveSpy ( el : HTMLDivElement ) {
432
+ beforeLeaveSpy ( )
433
+ el . classList . add ( 'before-leave' )
434
+ } ,
435
+ onLeaveSpy ( el : HTMLDivElement , done : ( ) => void ) {
436
+ onLeaveSpy ( )
437
+ el . classList . add ( 'leave' )
438
+ setTimeout ( done , 200 )
439
+ } ,
440
+ afterLeaveSpy : ( el : Element ) => {
441
+ afterLeaveSpy ( )
442
+ }
443
+ }
444
+ }
445
+ } ) . mount ( '#app' )
446
+ } )
447
+ expect ( await html ( '#container' ) ) . toBe ( '<div class="test">content</div>' )
448
+
449
+ // leave
450
+ await click ( '#toggleBtn' )
451
+ expect ( beforeLeaveSpy ) . toBeCalled ( )
452
+ expect ( onLeaveSpy ) . toBeCalled ( )
453
+ expect ( afterLeaveSpy ) . not . toBeCalled ( )
454
+ expect ( await classList ( '.test' ) ) . toStrictEqual ( [
455
+ 'test' ,
456
+ 'before-leave' ,
457
+ 'leave'
458
+ ] )
459
+
460
+ await timeout ( 200 + buffer )
461
+ expect ( afterLeaveSpy ) . toBeCalled ( )
462
+ expect ( await html ( '#container' ) ) . toBe ( '<!--v-if-->' )
463
+
464
+ // enter
465
+ await click ( '#toggleBtn' )
466
+ expect ( beforeEnterSpy ) . toBeCalled ( )
467
+ expect ( onEnterSpy ) . toBeCalled ( )
468
+ expect ( afterEnterSpy ) . not . toBeCalled ( )
469
+ expect ( await classList ( '.test' ) ) . toStrictEqual ( [
470
+ 'test' ,
471
+ 'before-enter' ,
472
+ 'enter'
473
+ ] )
474
+
475
+ await timeout ( 200 + buffer )
476
+ expect ( afterEnterSpy ) . toBeCalled ( )
477
+ expect ( await html ( '#container' ) ) . toBe (
478
+ '<div class="test before-enter enter after-enter">content</div>'
479
+ )
480
+ } ,
481
+ E2E_TIMEOUT
482
+ )
483
+
369
484
test ( 'onEnterCancelled' , async ( ) => {
370
485
const enterCancelledSpy = jest . fn ( )
371
486
0 commit comments