Skip to content

Commit e735f5e

Browse files
committed
test(Transition): events with arguments
1 parent c454aa5 commit e735f5e

File tree

1 file changed

+116
-1
lines changed

1 file changed

+116
-1
lines changed

packages/vue/__tests__/Transition.spec.ts

Lines changed: 116 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,6 @@ describe('e2e: Transition', () => {
328328
'test-leave-from',
329329
'test-leave-active'
330330
])
331-
// todo test event with arguments. Note: not get dom, get object. '{}'
332331
expect(beforeLeaveSpy).toBeCalled()
333332
expect(onLeaveSpy).toBeCalled()
334333
expect(afterLeaveSpy).not.toBeCalled()
@@ -366,6 +365,122 @@ describe('e2e: Transition', () => {
366365
E2E_TIMEOUT
367366
)
368367

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+
369484
test('onEnterCancelled', async () => {
370485
const enterCancelledSpy = jest.fn()
371486

0 commit comments

Comments
 (0)