Skip to content

Commit e5d7f32

Browse files
committed
tests for keep-alive include/exclude
1 parent 38b8cfd commit e5d7f32

File tree

1 file changed

+118
-1
lines changed

1 file changed

+118
-1
lines changed

test/unit/features/component/component-keep-alive.spec.js

Lines changed: 118 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import injectStyles from '../transition/inject-styles'
33
import { isIE9 } from 'core/util/env'
44
import { 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

Comments
 (0)