mirror of https://github.com/vuejs/core.git
test: add tests
This commit is contained in:
parent
001db1e3c2
commit
90daa5c0ad
|
@ -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)
|
||||
})
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue