Skip to content

Commit 9d111f5

Browse files
committed
test(transition): refactor DOM transition test
1 parent 66c5a55 commit 9d111f5

File tree

2 files changed

+56
-40
lines changed

2 files changed

+56
-40
lines changed

packages/vue/examples/__tests__/transition/Transition.spec.ts

+54-38
Original file line numberDiff line numberDiff line change
@@ -1,68 +1,84 @@
11
import { E2E_TIMEOUT, setupPuppeteer } from '../e2eUtils'
22
import path from 'path'
33

4-
function nextFrame(cb: () => void) {
5-
requestAnimationFrame(() => {
6-
requestAnimationFrame(cb)
7-
})
8-
}
9-
104
describe('e2e: Transition', () => {
11-
const { page, html, click, classList } = setupPuppeteer()
5+
const { page, html, classList } = setupPuppeteer()
126
const baseUrl = `file://${path.resolve(
137
__dirname,
148
'../../transition/index.html'
159
)}`
16-
const duration = 50,
17-
buffer = 10
10+
1811
const container = '#test'
1912

13+
const duration = 50
14+
const buffer = 10
15+
const transitionFinish = () =>
16+
new Promise(r => {
17+
setTimeout(r, duration + buffer)
18+
})
19+
20+
const nextFrame = () => {
21+
return page().evaluate(() => {
22+
return new Promise(resolve => {
23+
requestAnimationFrame(() => {
24+
requestAnimationFrame(resolve)
25+
})
26+
})
27+
})
28+
}
29+
2030
test(
2131
'basic transition',
2232
async () => {
2333
await page().goto(baseUrl)
2434
await page().waitFor('#app')
25-
expect(await html(container)).toBe('<div class="test"></div>')
35+
expect(await html(container)).toBe('<div class="test">content</div>')
2636

27-
await click('button')
28-
expect(await classList('#test div')).toStrictEqual([
37+
const leaveStartClasses = await page().evaluate(() => {
38+
document.querySelector('button')!.click()
39+
return Promise.resolve().then(() => {
40+
return document.querySelector('#test div')!.className.split(/\s+/g)
41+
})
42+
})
43+
44+
expect(leaveStartClasses).toStrictEqual([
2945
'test',
3046
'v-leave-active',
3147
'v-leave-from'
3248
])
33-
await new Promise((resolve, reject) => {
34-
nextFrame(async () => {
35-
expect(await classList('#test div')).toStrictEqual([
36-
'test',
37-
'v-leave-active',
38-
'v-leave-to'
39-
])
40-
setTimeout(async () => {
41-
expect(await html('#test')).toBe('<!--v-if-->')
42-
resolve()
43-
}, duration + buffer)
49+
50+
await nextFrame()
51+
expect(await classList('#test div')).toStrictEqual([
52+
'test',
53+
'v-leave-active',
54+
'v-leave-to'
55+
])
56+
57+
await transitionFinish()
58+
expect(await html('#test')).toBe('<!--v-if-->')
59+
60+
const enterStartClasses = await page().evaluate(() => {
61+
document.querySelector('button')!.click()
62+
return Promise.resolve().then(() => {
63+
return document.querySelector('#test div')!.className.split(/\s+/g)
4464
})
4565
})
4666

47-
await click('button')
48-
expect(await classList('#test div')).toStrictEqual([
67+
expect(enterStartClasses).toStrictEqual([
4968
'test',
5069
'v-enter-active',
5170
'v-enter-from'
5271
])
53-
await new Promise((resolve, reject) => {
54-
nextFrame(async () => {
55-
expect(await classList('#test div')).toStrictEqual([
56-
'test',
57-
'v-enter-active',
58-
'v-enter-to'
59-
])
60-
setTimeout(async () => {
61-
expect(await html('#test')).toBe('<div class="test"></div>')
62-
resolve()
63-
}, duration + buffer)
64-
})
65-
})
72+
73+
await nextFrame()
74+
expect(await classList('#test div')).toStrictEqual([
75+
'test',
76+
'v-enter-active',
77+
'v-enter-to'
78+
])
79+
80+
await transitionFinish()
81+
expect(await html('#test')).toBe('<div class="test">content</div>')
6682
},
6783
E2E_TIMEOUT
6884
)

packages/vue/examples/transition/index.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
<script>
44
Vue.createApp({
55
template: `
6-
<div id="test"><transition><div v-if="toggle" class="test"></div></transition></div>
7-
<button @click="click"></button>
6+
<div id="test"><transition><div v-if="toggle" class="test">content</div></transition></div>
7+
<button @click="click">button</button>
88
`,
99
setup:() => {
1010
const toggle = Vue.ref(true)

0 commit comments

Comments
 (0)