From d01c091967b59b69aa47b28db0b1f8ed0b2c928b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A2=AB=E9=9B=A8=E6=B0=B4=E8=BF=87=E6=BB=A4=E7=9A=84?= =?UTF-8?q?=E7=A9=BA=E6=B0=94-Rairn?= <958414905@qq.com> Date: Mon, 14 Nov 2022 09:45:44 +0800 Subject: [PATCH] test(Transition): events with arguments (#6823) --- packages/vue/__tests__/Transition.spec.ts | 117 +++++++++++++++++++++- 1 file changed, 116 insertions(+), 1 deletion(-) diff --git a/packages/vue/__tests__/Transition.spec.ts b/packages/vue/__tests__/Transition.spec.ts index 61926310d..f5d2450ae 100644 --- a/packages/vue/__tests__/Transition.spec.ts +++ b/packages/vue/__tests__/Transition.spec.ts @@ -328,7 +328,6 @@ describe('e2e: Transition', () => { 'test-leave-from', 'test-leave-active' ]) - // todo test event with arguments. Note: not get dom, get object. '{}' expect(beforeLeaveSpy).toBeCalled() expect(onLeaveSpy).toBeCalled() expect(afterLeaveSpy).not.toBeCalled() @@ -366,6 +365,122 @@ describe('e2e: Transition', () => { E2E_TIMEOUT ) + test( + 'events with arguments', + async () => { + const beforeLeaveSpy = jest.fn() + const onLeaveSpy = jest.fn() + const afterLeaveSpy = jest.fn() + const beforeEnterSpy = jest.fn() + const onEnterSpy = jest.fn() + const afterEnterSpy = jest.fn() + + await page().exposeFunction('onLeaveSpy', onLeaveSpy) + await page().exposeFunction('onEnterSpy', onEnterSpy) + await page().exposeFunction('beforeLeaveSpy', beforeLeaveSpy) + await page().exposeFunction('beforeEnterSpy', beforeEnterSpy) + await page().exposeFunction('afterLeaveSpy', afterLeaveSpy) + await page().exposeFunction('afterEnterSpy', afterEnterSpy) + + await page().evaluate(() => { + const { + beforeEnterSpy, + onEnterSpy, + afterEnterSpy, + beforeLeaveSpy, + onLeaveSpy, + afterLeaveSpy + } = window as any + const { createApp, ref } = (window as any).Vue + createApp({ + template: ` +
+ +
content
+
+
+ + `, + setup: () => { + const toggle = ref(true) + const click = () => (toggle.value = !toggle.value) + return { + toggle, + click, + beforeEnterSpy(el: Element) { + beforeEnterSpy() + el.classList.add('before-enter') + }, + onEnterSpy(el: Element, done: () => void) { + onEnterSpy() + el.classList.add('enter') + setTimeout(done, 200) + }, + afterEnterSpy(el: Element) { + afterEnterSpy() + el.classList.add('after-enter') + }, + beforeLeaveSpy(el: HTMLDivElement) { + beforeLeaveSpy() + el.classList.add('before-leave') + }, + onLeaveSpy(el: HTMLDivElement, done: () => void) { + onLeaveSpy() + el.classList.add('leave') + setTimeout(done, 200) + }, + afterLeaveSpy: (el: Element) => { + afterLeaveSpy() + } + } + } + }).mount('#app') + }) + expect(await html('#container')).toBe('
content
') + + // leave + await click('#toggleBtn') + expect(beforeLeaveSpy).toBeCalled() + expect(onLeaveSpy).toBeCalled() + expect(afterLeaveSpy).not.toBeCalled() + expect(await classList('.test')).toStrictEqual([ + 'test', + 'before-leave', + 'leave' + ]) + + await timeout(200 + buffer) + expect(afterLeaveSpy).toBeCalled() + expect(await html('#container')).toBe('') + + // enter + await click('#toggleBtn') + expect(beforeEnterSpy).toBeCalled() + expect(onEnterSpy).toBeCalled() + expect(afterEnterSpy).not.toBeCalled() + expect(await classList('.test')).toStrictEqual([ + 'test', + 'before-enter', + 'enter' + ]) + + await timeout(200 + buffer) + expect(afterEnterSpy).toBeCalled() + expect(await html('#container')).toBe( + '
content
' + ) + }, + E2E_TIMEOUT + ) + test('onEnterCancelled', async () => { const enterCancelledSpy = jest.fn()