From: daiwei Date: Fri, 7 Mar 2025 01:29:05 +0000 (+0800) Subject: wip: fix tests X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6e7c5e3d25786f299c9ed4b00eeb3c04dccfd134;p=thirdparty%2Fvuejs%2Fcore.git wip: fix tests --- diff --git a/packages-private/vapor-e2e-test/__tests__/transition.spec.ts b/packages-private/vapor-e2e-test/__tests__/transition.spec.ts index 05e39fa5df..e532e5eed3 100644 --- a/packages-private/vapor-e2e-test/__tests__/transition.spec.ts +++ b/packages-private/vapor-e2e-test/__tests__/transition.spec.ts @@ -32,11 +32,8 @@ describe('vapor transition', () => { await page().waitForSelector('#app') }) - const classWhenTransitionStart = async ( - btnSelector: string, - containerSelector: string, - ) => { - return page().evaluate( + const transitionStart = (btnSelector: string, containerSelector: string) => + page().evaluate( ([btnSel, containerSel]) => { ;(document.querySelector(btnSel) as HTMLElement)!.click() return Promise.resolve().then(() => { @@ -49,7 +46,28 @@ describe('vapor transition', () => { }, [btnSelector, containerSelector], ) - } + + const waitForElement = ( + selector: string, + text: string, + classNames: string[], // if empty, check for no classes + timeout = 2000, + ) => + page().waitForFunction( + (sel, expectedText, expectedClasses) => { + const el = document.querySelector(sel)! + const hasClasses = + expectedClasses.length === 0 + ? el.classList.length === 0 + : expectedClasses.every(c => el.classList.contains(c)) + const hasText = el?.textContent?.includes(expectedText) + return !!el && hasClasses && hasText + }, + { timeout }, + selector, + text, + classNames, + ) test( 'should work with v-show', @@ -61,8 +79,7 @@ describe('vapor transition', () => { // leave expect( - (await classWhenTransitionStart(btnSelector, containerSelector)) - .classNames, + (await transitionStart(btnSelector, containerSelector)).classNames, ).toStrictEqual(['v-leave-from', 'v-leave-active']) await nextFrame() @@ -77,8 +94,7 @@ describe('vapor transition', () => { // enter expect( - (await classWhenTransitionStart(btnSelector, containerSelector)) - .classNames, + (await transitionStart(btnSelector, containerSelector)).classNames, ).toStrictEqual(['v-enter-from', 'v-enter-active']) await nextFrame() @@ -108,8 +124,7 @@ describe('vapor transition', () => { // leave expect( - (await classWhenTransitionStart(btnSelector, containerSelector)) - .classNames, + (await transitionStart(btnSelector, containerSelector)).classNames, ).toStrictEqual(['v-leave-from', 'v-leave-active']) await nextFrame() @@ -124,8 +139,7 @@ describe('vapor transition', () => { // enter expect( - (await classWhenTransitionStart(btnSelector, containerSelector)) - .classNames, + (await transitionStart(btnSelector, containerSelector)).classNames, ).toStrictEqual(['v-enter-from', 'v-enter-active']) await nextFrame() @@ -151,8 +165,7 @@ describe('vapor transition', () => { // change key expect( - (await classWhenTransitionStart(btnSelector, containerSelector)) - .classNames, + (await transitionStart(btnSelector, containerSelector)).classNames, ).toStrictEqual(['v-leave-from', 'v-leave-active']) await nextFrame() @@ -167,8 +180,7 @@ describe('vapor transition', () => { // change key again expect( - (await classWhenTransitionStart(btnSelector, containerSelector)) - .classNames, + (await transitionStart(btnSelector, containerSelector)).classNames, ).toStrictEqual(['v-leave-from', 'v-leave-active']) await nextFrame() @@ -189,13 +201,14 @@ describe('vapor transition', () => { async () => { const btnSelector = '.out-in > button' const containerSelector = '.out-in > div' + const childSelector = `${containerSelector} > div` expect(await html(containerSelector)).toBe(`
vapor compB
`) // compB -> compA + // compB leave expect( - (await classWhenTransitionStart(btnSelector, containerSelector)) - .innerHTML, + (await transitionStart(btnSelector, containerSelector)).innerHTML, ).toBe(`
vapor compB
`) await nextFrame() @@ -203,10 +216,11 @@ describe('vapor transition', () => { `
vapor compB
`, ) - await page().waitForSelector(`${containerSelector} > div.fade-enter-from`) - expect(await html(containerSelector)).toBe( - `
vapor compA
`, - ) + // compA enter + await waitForElement(childSelector, 'vapor compA', [ + 'fade-enter-from', + 'fade-enter-active', + ]) await nextFrame() expect(await html(containerSelector)).toBe( @@ -220,9 +234,9 @@ describe('vapor transition', () => { ) // compA -> compB + // compA leave expect( - (await classWhenTransitionStart(btnSelector, containerSelector)) - .innerHTML, + (await transitionStart(btnSelector, containerSelector)).innerHTML, ).toBe(`
vapor compA
`) await nextFrame() @@ -230,14 +244,18 @@ describe('vapor transition', () => { `
vapor compA
`, ) - await transitionFinish() + // compB enter + await waitForElement(childSelector, 'vapor compB', [ + 'fade-enter-from', + 'fade-enter-active', + ]) + await nextFrame() expect(await html(containerSelector)).toBe( `
vapor compB
`, ) await transitionFinish() - await nextFrame() expect(await html(containerSelector)).toBe( `
vapor compB
`, ) @@ -245,20 +263,19 @@ describe('vapor transition', () => { E2E_TIMEOUT, ) - test.todo( + test( 'should work with in-out mode', async () => { const btnSelector = '.in-out > button' const containerSelector = '.in-out > div' + const childSelector = `${containerSelector} > div` expect(await html(containerSelector)).toBe(`
vapor compB
`) // compA enter - const { innerHTML } = await classWhenTransitionStart( - btnSelector, - containerSelector, - ) - expect(innerHTML).toBe( + expect( + (await transitionStart(btnSelector, containerSelector)).innerHTML, + ).toBe( `
vapor compB
vapor compA
`, ) @@ -267,15 +284,11 @@ describe('vapor transition', () => { `
vapor compB
vapor compA
`, ) - await transitionFinish() - expect(await html(containerSelector)).toBe( - `
vapor compB
vapor compA
`, - ) - // compB leave - expect(await html(containerSelector)).toBe( - `
vapor compB
vapor compA
`, - ) + await waitForElement(childSelector, 'vapor compB', [ + 'fade-leave-from', + 'fade-leave-active', + ]) await nextFrame() expect(await html(containerSelector)).toBe( @@ -283,7 +296,6 @@ describe('vapor transition', () => { ) await transitionFinish() - await nextFrame() expect(await html(containerSelector)).toBe( `
vapor compA
`, ) diff --git a/packages-private/vapor-e2e-test/transition/App.vue b/packages-private/vapor-e2e-test/transition/App.vue index 3166f274d1..8d4d31f7bc 100644 --- a/packages-private/vapor-e2e-test/transition/App.vue +++ b/packages-private/vapor-e2e-test/transition/App.vue @@ -6,7 +6,7 @@ const count = ref(0) import VaporCompA from './components/VaporCompA.vue' import VaporCompB from './components/VaporCompB.vue' -const activeComponent = shallowRef(VaporCompA) +const activeComponent = shallowRef(VaporCompB) function toggleComponent() { activeComponent.value = activeComponent.value === VaporCompA ? VaporCompB : VaporCompA diff --git a/packages-private/vapor-e2e-test/transition/components/VaporCompA.vue b/packages-private/vapor-e2e-test/transition/components/VaporCompA.vue index c22f3b6bbc..40b09eaf45 100644 --- a/packages-private/vapor-e2e-test/transition/components/VaporCompA.vue +++ b/packages-private/vapor-e2e-test/transition/components/VaporCompA.vue @@ -1,5 +1,5 @@