@@ -3,7 +3,7 @@ import injectStyles from '../transition/inject-styles'
33import { isIE9 } from 'core/util/env'
44import { nextFrame } from 'web/runtime/transition-util'
55
6- describe ( 'Component keep-alive' , ( ) => {
6+ fdescribe ( 'Component keep-alive' , ( ) => {
77 const { duration, buffer } = injectStyles ( )
88 let components , one , two , el
99 beforeEach ( ( ) => {
@@ -82,6 +82,123 @@ describe('Component keep-alive', () => {
8282 } ) . then ( done )
8383 } )
8484
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+
85202 // #3882
86203 it ( 'deeply nested keep-alive should be destroyed properly' , done => {
87204 one . template = `<div><keep-alive><two></two></keep-alive></div>`
0 commit comments