@@ -5,10 +5,23 @@ import {
5
5
} from '../../../packages/vue/__tests__/e2e/e2eUtils'
6
6
import connect from 'connect'
7
7
import sirv from 'sirv'
8
+ const {
9
+ page,
10
+ click,
11
+ text,
12
+ enterValue,
13
+ html,
14
+ transitionStart,
15
+ waitForElement,
16
+ nextFrame,
17
+ timeout,
18
+ } = setupPuppeteer ( )
19
+
20
+ const duration = process . env . CI ? 200 : 50
21
+ const buffer = process . env . CI ? 50 : 20
22
+ const transitionFinish = ( time = duration ) => timeout ( time + buffer )
8
23
9
24
describe ( 'vdom / vapor interop' , ( ) => {
10
- const { page, click, text, enterValue } = setupPuppeteer ( )
11
-
12
25
let server : any
13
26
const port = '8193'
14
27
beforeAll ( ( ) => {
@@ -22,12 +35,15 @@ describe('vdom / vapor interop', () => {
22
35
server . close ( )
23
36
} )
24
37
38
+ beforeEach ( async ( ) => {
39
+ const baseUrl = `http://localhost:${ port } /interop/`
40
+ await page ( ) . goto ( baseUrl )
41
+ await page ( ) . waitForSelector ( '#app' )
42
+ } )
43
+
25
44
test (
26
45
'should work' ,
27
46
async ( ) => {
28
- const baseUrl = `http://localhost:${ port } /interop/`
29
- await page ( ) . goto ( baseUrl )
30
-
31
47
expect ( await text ( '.vapor > h2' ) ) . toContain ( 'Vapor component in VDOM' )
32
48
33
49
expect ( await text ( '.vapor-prop' ) ) . toContain ( 'hello' )
@@ -81,4 +97,121 @@ describe('vdom / vapor interop', () => {
81
97
} ,
82
98
E2E_TIMEOUT ,
83
99
)
100
+
101
+ describe ( 'vdom transition' , ( ) => {
102
+ test (
103
+ 'render vapor component' ,
104
+ async ( ) => {
105
+ const btnSelector = '.trans-vapor > button'
106
+ const containerSelector = '.trans-vapor > div'
107
+
108
+ expect ( await html ( containerSelector ) ) . toBe (
109
+ `<div key="0">vapor compA</div>` ,
110
+ )
111
+
112
+ // comp leave
113
+ expect (
114
+ ( await transitionStart ( btnSelector , containerSelector ) ) . innerHTML ,
115
+ ) . toBe (
116
+ `<div key="0" class="v-leave-from v-leave-active">vapor compA</div><!---->` ,
117
+ )
118
+
119
+ await nextFrame ( )
120
+ expect ( await html ( containerSelector ) ) . toBe (
121
+ `<div key="0" class="v-leave-active v-leave-to">vapor compA</div><!---->` ,
122
+ )
123
+
124
+ await transitionFinish ( )
125
+ expect ( await html ( containerSelector ) ) . toBe ( `<!---->` )
126
+
127
+ // comp enter
128
+ expect (
129
+ ( await transitionStart ( btnSelector , containerSelector ) ) . innerHTML ,
130
+ ) . toBe (
131
+ `<div key="0" class="v-enter-from v-enter-active">vapor compA</div>` ,
132
+ )
133
+
134
+ await nextFrame ( )
135
+ expect ( await html ( containerSelector ) ) . toBe (
136
+ `<div key="0" class="v-enter-active v-enter-to">vapor compA</div>` ,
137
+ )
138
+
139
+ await transitionFinish ( )
140
+ expect ( await html ( containerSelector ) ) . toBe (
141
+ `<div key="0" class="">vapor compA</div>` ,
142
+ )
143
+ } ,
144
+ E2E_TIMEOUT ,
145
+ )
146
+
147
+ test (
148
+ 'switch between vdom/vapor component (out-in mode)' ,
149
+ async ( ) => {
150
+ const btnSelector = '.trans-vdom-vapor-out-in > button'
151
+ const containerSelector = '.trans-vdom-vapor-out-in > div'
152
+ const childSelector = `${ containerSelector } > div`
153
+
154
+ expect ( await html ( containerSelector ) ) . toBe ( `<div>vdom comp</div>` )
155
+
156
+ // switch to vapor comp
157
+ // vdom comp leave
158
+ expect (
159
+ ( await transitionStart ( btnSelector , containerSelector ) ) . innerHTML ,
160
+ ) . toBe (
161
+ `<div class="fade-leave-from fade-leave-active">vdom comp</div><!---->` ,
162
+ )
163
+
164
+ await nextFrame ( )
165
+ expect ( await html ( containerSelector ) ) . toBe (
166
+ `<div class="fade-leave-active fade-leave-to">vdom comp</div><!---->` ,
167
+ )
168
+
169
+ // vapor comp enter
170
+ await waitForElement ( childSelector , 'vapor compA' , [
171
+ 'fade-enter-from' ,
172
+ 'fade-enter-active' ,
173
+ ] )
174
+
175
+ await nextFrame ( )
176
+ expect ( await html ( containerSelector ) ) . toBe (
177
+ `<div class="fade-enter-active fade-enter-to">vapor compA</div>` ,
178
+ )
179
+
180
+ await transitionFinish ( )
181
+ expect ( await html ( containerSelector ) ) . toBe (
182
+ `<div class="">vapor compA</div>` ,
183
+ )
184
+
185
+ // switch to vdom comp
186
+ // vapor comp leave
187
+ expect (
188
+ ( await transitionStart ( btnSelector , containerSelector ) ) . innerHTML ,
189
+ ) . toBe (
190
+ `<div class="fade-leave-from fade-leave-active">vapor compA</div><!---->` ,
191
+ )
192
+
193
+ await nextFrame ( )
194
+ expect ( await html ( containerSelector ) ) . toBe (
195
+ `<div class="fade-leave-active fade-leave-to">vapor compA</div><!---->` ,
196
+ )
197
+
198
+ // vdom comp enter
199
+ await waitForElement ( childSelector , 'vdom comp' , [
200
+ 'fade-enter-from' ,
201
+ 'fade-enter-active' ,
202
+ ] )
203
+
204
+ await nextFrame ( )
205
+ expect ( await html ( containerSelector ) ) . toBe (
206
+ `<div class="fade-enter-active fade-enter-to">vdom comp</div>` ,
207
+ )
208
+
209
+ await transitionFinish ( )
210
+ expect ( await html ( containerSelector ) ) . toBe (
211
+ `<div class="">vdom comp</div>` ,
212
+ )
213
+ } ,
214
+ E2E_TIMEOUT ,
215
+ )
216
+ } )
84
217
} )
0 commit comments