mirror of https://github.com/vuejs/core.git
test(runtime-core): test cases when the value of the `$stable` flag is false (#11485)
This commit is contained in:
parent
33cd61356f
commit
3430bffa4b
|
@ -213,7 +213,7 @@ describe('component: slots', () => {
|
||||||
expect(instance.slots.default()).toMatchObject([normalizeVNode('footer')])
|
expect(instance.slots.default()).toMatchObject([normalizeVNode('footer')])
|
||||||
})
|
})
|
||||||
|
|
||||||
test('should respect $stable flag', async () => {
|
test('should respect $stable flag with a value of true', async () => {
|
||||||
const flag1 = ref(1)
|
const flag1 = ref(1)
|
||||||
const flag2 = ref(2)
|
const flag2 = ref(2)
|
||||||
const spy = vi.fn()
|
const spy = vi.fn()
|
||||||
|
@ -255,6 +255,48 @@ describe('component: slots', () => {
|
||||||
expect(spy).toHaveBeenCalledTimes(2)
|
expect(spy).toHaveBeenCalledTimes(2)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('should respect $stable flag with a value of false', async () => {
|
||||||
|
const flag1 = ref(1)
|
||||||
|
const flag2 = ref(2)
|
||||||
|
const spy = vi.fn()
|
||||||
|
|
||||||
|
const Child = () => {
|
||||||
|
spy()
|
||||||
|
return 'child'
|
||||||
|
}
|
||||||
|
|
||||||
|
const App = {
|
||||||
|
setup() {
|
||||||
|
return () => [
|
||||||
|
flag1.value,
|
||||||
|
h(
|
||||||
|
Child,
|
||||||
|
{ n: flag2.value },
|
||||||
|
{
|
||||||
|
foo: () => 'foo',
|
||||||
|
$stable: false,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
render(h(App), nodeOps.createElement('div'))
|
||||||
|
expect(spy).toHaveBeenCalledTimes(1)
|
||||||
|
|
||||||
|
// parent re-render, props didn't change, slots are not stable
|
||||||
|
// -> child should update
|
||||||
|
flag1.value++
|
||||||
|
await nextTick()
|
||||||
|
expect(spy).toHaveBeenCalledTimes(2)
|
||||||
|
|
||||||
|
// parent re-render, props changed
|
||||||
|
// -> child should update
|
||||||
|
flag2.value++
|
||||||
|
await nextTick()
|
||||||
|
expect(spy).toHaveBeenCalledTimes(3)
|
||||||
|
})
|
||||||
|
|
||||||
test('should not warn when mounting another app in setup', () => {
|
test('should not warn when mounting another app in setup', () => {
|
||||||
const Comp = {
|
const Comp = {
|
||||||
setup(_: any, { slots }: any) {
|
setup(_: any, { slots }: any) {
|
||||||
|
|
Loading…
Reference in New Issue