@@ -11,30 +11,36 @@ const {
1111 text,
1212 enterValue,
1313 html,
14+ value,
1415 transitionStart,
1516 waitForElement,
1617 nextFrame,
1718 timeout,
1819} = setupPuppeteer ( )
1920
21+ let server : any
22+ const port = '8193'
23+ beforeAll ( ( ) => {
24+ server = connect ( )
25+ . use ( sirv ( path . resolve ( import . meta. dirname , '../dist' ) ) )
26+ . listen ( port )
27+ process . on ( 'SIGTERM' , ( ) => server && server . close ( ) )
28+ } )
29+ afterAll ( ( ) => {
30+ server . close ( )
31+ } )
32+
33+ beforeEach ( async ( ) => {
34+ const baseUrl = `http://localhost:${ port } /interop/`
35+ await page ( ) . goto ( baseUrl )
36+ await page ( ) . waitForSelector ( '#app' )
37+ } )
38+
2039const duration = process . env . CI ? 200 : 50
2140const buffer = process . env . CI ? 50 : 20
2241const transitionFinish = ( time = duration ) => timeout ( time + buffer )
2342
2443describe ( 'vdom / vapor interop' , ( ) => {
25- let server : any
26- const port = '8193'
27- beforeAll ( ( ) => {
28- server = connect ( )
29- . use ( sirv ( path . resolve ( import . meta. dirname , '../dist' ) ) )
30- . listen ( port )
31- process . on ( 'SIGTERM' , ( ) => server && server . close ( ) )
32- } )
33-
34- afterAll ( ( ) => {
35- server . close ( )
36- } )
37-
3844 beforeEach ( async ( ) => {
3945 const baseUrl = `http://localhost:${ port } /interop/`
4046 await page ( ) . goto ( baseUrl )
@@ -98,6 +104,66 @@ describe('vdom / vapor interop', () => {
98104 E2E_TIMEOUT ,
99105 )
100106
107+ describe ( 'keepalive' , ( ) => {
108+ test (
109+ 'render vapor component' ,
110+ async ( ) => {
111+ const testSelector = '.render-vapor-component'
112+ const btnShow = `${ testSelector } .btn-show`
113+ const btnToggle = `${ testSelector } .btn-toggle`
114+ const container = `${ testSelector } > div`
115+ const inputSelector = `${ testSelector } input`
116+
117+ let calls = await page ( ) . evaluate ( ( ) => {
118+ return ( window as any ) . getCalls ( )
119+ } )
120+ expect ( calls ) . toStrictEqual ( [ 'mounted' , 'activated' ] )
121+
122+ expect ( await html ( container ) ) . toBe ( '<input type="text">' )
123+ expect ( await value ( inputSelector ) ) . toBe ( 'vapor' )
124+
125+ // change input value
126+ await enterValue ( inputSelector , 'changed' )
127+ expect ( await value ( inputSelector ) ) . toBe ( 'changed' )
128+
129+ // deactivate
130+ await click ( btnToggle )
131+ expect ( await html ( container ) ) . toBe ( '<!---->' )
132+ calls = await page ( ) . evaluate ( ( ) => {
133+ return ( window as any ) . getCalls ( )
134+ } )
135+ expect ( calls ) . toStrictEqual ( [ 'deactivated' ] )
136+
137+ // activate
138+ await click ( btnToggle )
139+ expect ( await html ( container ) ) . toBe ( '<input type="text">' )
140+ expect ( await value ( inputSelector ) ) . toBe ( 'changed' )
141+ calls = await page ( ) . evaluate ( ( ) => {
142+ return ( window as any ) . getCalls ( )
143+ } )
144+ expect ( calls ) . toStrictEqual ( [ 'activated' ] )
145+
146+ // unmount keepalive
147+ await click ( btnShow )
148+ expect ( await html ( container ) ) . toBe ( '<!---->' )
149+ calls = await page ( ) . evaluate ( ( ) => {
150+ return ( window as any ) . getCalls ( )
151+ } )
152+ expect ( calls ) . toStrictEqual ( [ 'deactivated' , 'unmounted' ] )
153+
154+ // mount keepalive
155+ await click ( btnShow )
156+ expect ( await html ( container ) ) . toBe ( '<input type="text">' )
157+ expect ( await value ( inputSelector ) ) . toBe ( 'vapor' )
158+ calls = await page ( ) . evaluate ( ( ) => {
159+ return ( window as any ) . getCalls ( )
160+ } )
161+ expect ( calls ) . toStrictEqual ( [ 'mounted' , 'activated' ] )
162+ } ,
163+ E2E_TIMEOUT ,
164+ )
165+ } )
166+
101167 describe ( 'vdom transition' , ( ) => {
102168 test (
103169 'render vapor component' ,
0 commit comments