test: add tests

This commit is contained in:
daiwei 2024-11-28 15:36:55 +08:00
parent 001db1e3c2
commit 90daa5c0ad
1 changed files with 109 additions and 0 deletions

View File

@ -5,7 +5,9 @@ import {
nextTick,
ref,
render,
vModelCheckbox,
vModelDynamic,
vModelText,
withDirectives,
} from '@vue/runtime-dom'
@ -1445,4 +1447,111 @@ describe('vModel', () => {
expect(inputNum1.value).toBe('1')
})
// #12460
it('prevent input value update in mounted hook if value was updated', async () => {
const Comp = defineComponent({
data() {
return {
val: 'bug',
}
},
methods: {
onUpdate() {
this.val = 'ok'
},
},
render() {
return h('div', null, [
withDirectives(
h('input', {
'onUpdate:modelValue': (v: any) => (this.val = v),
type: 'search',
}),
[[vModelText, this.val]],
),
'should be ' + this.val,
this.$slots.default!({ onUpdate: this.onUpdate }),
])
},
})
const show = ref(false)
const Page = defineComponent({
render() {
return show.value
? h(Comp, null, {
default: (attrs: any) => {
attrs.onUpdate()
return h('div')
},
})
: h('div')
},
})
render(h(Page), root)
expect(root.innerHTML).toBe('<div></div>')
show.value = true
await nextTick()
expect(root.innerHTML).toBe(
'<div><input type="search">should be ok<div></div></div>',
)
const input = root.querySelector('input')!
expect(input.value).toEqual('ok')
})
it('prevent checkbox value update in mounted hook if value was updated', async () => {
const Comp = defineComponent({
data() {
return {
val: false,
}
},
methods: {
onUpdate() {
this.val = true
},
},
render() {
return h('div', null, [
withDirectives(
h('input', {
'onUpdate:modelValue': (v: any) => (this.val = v),
type: 'checkbox',
}),
[[vModelCheckbox, this.val]],
),
'should be ' + this.val,
this.$slots.default!({ onUpdate: this.onUpdate }),
])
},
})
const show = ref(false)
const Page = defineComponent({
render() {
return show.value
? h(Comp, null, {
default: (attrs: any) => {
attrs.onUpdate()
return h('div')
},
})
: h('div')
},
})
render(h(Page), root)
expect(root.innerHTML).toBe('<div></div>')
show.value = true
await nextTick()
expect(root.innerHTML).toBe(
'<div><input type="checkbox">should be true<div></div></div>',
)
const input = root.querySelector('input')!
expect(input.checked).toEqual(true)
})
})