@@ -3,7 +3,7 @@ import injectStyles from '../transition/inject-styles'
3
3
import { isIE9 } from 'core/util/env'
4
4
import { nextFrame } from 'web/runtime/transition-util'
5
5
6
- describe ( 'Component keep-alive' , ( ) => {
6
+ fdescribe ( 'Component keep-alive' , ( ) => {
7
7
const { duration, buffer } = injectStyles ( )
8
8
let components , one , two , el
9
9
beforeEach ( ( ) => {
@@ -82,6 +82,123 @@ describe('Component keep-alive', () => {
82
82
} ) . then ( done )
83
83
} )
84
84
85
+ function sharedAssertions ( vm , done ) {
86
+ expect ( vm . $el . textContent ) . toBe ( 'one' )
87
+ assertHookCalls ( one , [ 1 , 1 , 1 , 0 , 0 ] )
88
+ assertHookCalls ( two , [ 0 , 0 , 0 , 0 , 0 ] )
89
+ vm . view = 'two'
90
+ waitForUpdate ( ( ) => {
91
+ expect ( vm . $el . textContent ) . toBe ( 'two' )
92
+ assertHookCalls ( one , [ 1 , 1 , 1 , 1 , 0 ] )
93
+ assertHookCalls ( two , [ 1 , 1 , 0 , 0 , 0 ] )
94
+ vm . view = 'one'
95
+ } ) . then ( ( ) => {
96
+ expect ( vm . $el . textContent ) . toBe ( 'one' )
97
+ assertHookCalls ( one , [ 1 , 1 , 2 , 1 , 0 ] )
98
+ assertHookCalls ( two , [ 1 , 1 , 0 , 0 , 1 ] )
99
+ vm . view = 'two'
100
+ } ) . then ( ( ) => {
101
+ expect ( vm . $el . textContent ) . toBe ( 'two' )
102
+ assertHookCalls ( one , [ 1 , 1 , 2 , 2 , 0 ] )
103
+ assertHookCalls ( two , [ 2 , 2 , 0 , 0 , 1 ] )
104
+ vm . ok = false // teardown
105
+ } ) . then ( ( ) => {
106
+ expect ( vm . $el . textContent ) . toBe ( '' )
107
+ assertHookCalls ( one , [ 1 , 1 , 2 , 3 , 1 ] )
108
+ assertHookCalls ( two , [ 2 , 2 , 0 , 0 , 2 ] )
109
+ } ) . then ( done )
110
+ }
111
+
112
+ it ( 'include (string)' , done => {
113
+ const vm = new Vue ( {
114
+ template : `
115
+ <div v-if="ok">
116
+ <keep-alive include="one">
117
+ <component :is="view"></component>
118
+ </keep-alive>
119
+ </div>
120
+ ` ,
121
+ data : {
122
+ view : 'one' ,
123
+ ok : true
124
+ } ,
125
+ components
126
+ } ) . $mount ( )
127
+ sharedAssertions ( vm , done )
128
+ } )
129
+
130
+ it ( 'include (regex)' , done => {
131
+ const vm = new Vue ( {
132
+ template : `
133
+ <div v-if="ok">
134
+ <keep-alive :include="/^one$/">
135
+ <component :is="view"></component>
136
+ </keep-alive>
137
+ </div>
138
+ ` ,
139
+ data : {
140
+ view : 'one' ,
141
+ ok : true
142
+ } ,
143
+ components
144
+ } ) . $mount ( )
145
+ sharedAssertions ( vm , done )
146
+ } )
147
+
148
+ it ( 'exclude (string)' , done => {
149
+ const vm = new Vue ( {
150
+ template : `
151
+ <div v-if="ok">
152
+ <keep-alive exclude="two">
153
+ <component :is="view"></component>
154
+ </keep-alive>
155
+ </div>
156
+ ` ,
157
+ data : {
158
+ view : 'one' ,
159
+ ok : true
160
+ } ,
161
+ components
162
+ } ) . $mount ( )
163
+ sharedAssertions ( vm , done )
164
+ } )
165
+
166
+ it ( 'exclude (regex)' , done => {
167
+ const vm = new Vue ( {
168
+ template : `
169
+ <div v-if="ok">
170
+ <keep-alive :exclude="/^two$/">
171
+ <component :is="view"></component>
172
+ </keep-alive>
173
+ </div>
174
+ ` ,
175
+ data : {
176
+ view : 'one' ,
177
+ ok : true
178
+ } ,
179
+ components
180
+ } ) . $mount ( )
181
+ sharedAssertions ( vm , done )
182
+ } )
183
+
184
+ it ( 'include + exclude' , done => {
185
+ const vm = new Vue ( {
186
+ template : `
187
+ <div v-if="ok">
188
+ <keep-alive include="one,two" exclude="two">
189
+ <component :is="view"></component>
190
+ </keep-alive>
191
+ </div>
192
+ ` ,
193
+ data : {
194
+ view : 'one' ,
195
+ ok : true
196
+ } ,
197
+ components
198
+ } ) . $mount ( )
199
+ sharedAssertions ( vm , done )
200
+ } )
201
+
85
202
// #3882
86
203
it ( 'deeply nested keep-alive should be destroyed properly' , done => {
87
204
one . template = `<div><keep-alive><two></two></keep-alive></div>`
0 commit comments