1
- import { createApp } from '../src'
1
+ import { createApp , ref , nextTick } from '../src'
2
2
import { mockWarn } from '@vue/shared'
3
3
4
4
describe ( 'compiler + runtime integration' , ( ) => {
@@ -18,6 +18,62 @@ describe('compiler + runtime integration', () => {
18
18
expect ( container . innerHTML ) . toBe ( `0` )
19
19
} )
20
20
21
+ it ( 'keep-alive with compiler + runtime integration' , async ( ) => {
22
+ const container = document . createElement ( 'div' )
23
+ const one = {
24
+ name : 'one' ,
25
+ template : 'one' ,
26
+ created : jest . fn ( ) ,
27
+ mounted : jest . fn ( ) ,
28
+ activated : jest . fn ( ) ,
29
+ deactivated : jest . fn ( ) ,
30
+ destroyed : jest . fn ( )
31
+ }
32
+
33
+ const toggle = ref ( true )
34
+
35
+ const App = {
36
+ template : `
37
+ <keep-alive>
38
+ <one v-if="toggle"></one>
39
+ </keep-alive>
40
+ ` ,
41
+ data ( ) {
42
+ return {
43
+ toggle
44
+ }
45
+ } ,
46
+ components : {
47
+ One : one
48
+ }
49
+ }
50
+ createApp ( App ) . mount ( container )
51
+ expect ( container . innerHTML ) . toBe ( `one` )
52
+ expect ( one . created ) . toHaveBeenCalledTimes ( 1 )
53
+ expect ( one . mounted ) . toHaveBeenCalledTimes ( 1 )
54
+ expect ( one . activated ) . toHaveBeenCalledTimes ( 1 )
55
+ expect ( one . deactivated ) . toHaveBeenCalledTimes ( 0 )
56
+ expect ( one . destroyed ) . toHaveBeenCalledTimes ( 0 )
57
+
58
+ toggle . value = false ;
59
+ await nextTick ( )
60
+ expect ( container . innerHTML ) . toBe ( `<!--v-if-->` )
61
+ expect ( one . created ) . toHaveBeenCalledTimes ( 1 )
62
+ expect ( one . mounted ) . toHaveBeenCalledTimes ( 1 )
63
+ expect ( one . activated ) . toHaveBeenCalledTimes ( 1 )
64
+ expect ( one . deactivated ) . toHaveBeenCalledTimes ( 1 )
65
+ expect ( one . destroyed ) . toHaveBeenCalledTimes ( 0 )
66
+
67
+ toggle . value = true ;
68
+ await nextTick ( )
69
+ expect ( container . innerHTML ) . toBe ( `one` )
70
+ expect ( one . created ) . toHaveBeenCalledTimes ( 1 )
71
+ expect ( one . mounted ) . toHaveBeenCalledTimes ( 1 )
72
+ expect ( one . activated ) . toHaveBeenCalledTimes ( 2 )
73
+ expect ( one . deactivated ) . toHaveBeenCalledTimes ( 1 )
74
+ expect ( one . destroyed ) . toHaveBeenCalledTimes ( 0 )
75
+ } )
76
+
21
77
it ( 'should support runtime template via CSS ID selector' , ( ) => {
22
78
const container = document . createElement ( 'div' )
23
79
const template = document . createElement ( 'div' )
0 commit comments