|
|
@@ -1,5 +1,12 @@
|
|
|
import { patchProp } from '../src/patchProp'
|
|
|
-import { h, nextTick, ref, render } from '../src'
|
|
|
+import {
|
|
|
+ h,
|
|
|
+ nextTick,
|
|
|
+ ref,
|
|
|
+ render,
|
|
|
+ vModelCheckbox,
|
|
|
+ withDirectives,
|
|
|
+} from '../src'
|
|
|
|
|
|
describe('runtime-dom: props patching', () => {
|
|
|
test('basic', () => {
|
|
|
@@ -351,4 +358,40 @@ describe('runtime-dom: props patching', () => {
|
|
|
expect(el.translate).toBeFalsy()
|
|
|
expect(el.getAttribute('translate')).toBe('no')
|
|
|
})
|
|
|
+
|
|
|
+ // #11647
|
|
|
+ test('should not trigger input mutation when `value` is `undefined`', async () => {
|
|
|
+ const fn = vi.fn()
|
|
|
+ const comp = {
|
|
|
+ setup() {
|
|
|
+ const checked = ref()
|
|
|
+ return () =>
|
|
|
+ withDirectives(
|
|
|
+ h('input', {
|
|
|
+ type: 'checkbox',
|
|
|
+ value: undefined,
|
|
|
+ 'onUpdate:modelValue': (value: any) => {
|
|
|
+ checked.value = value
|
|
|
+ },
|
|
|
+ }),
|
|
|
+ [[vModelCheckbox, checked.value]],
|
|
|
+ )
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ const root = document.createElement('div')
|
|
|
+ render(h(comp), root)
|
|
|
+ document.body.append(root)
|
|
|
+
|
|
|
+ const el = root.children[0] as HTMLInputElement
|
|
|
+ const observer = new MutationObserver(fn)
|
|
|
+ observer.observe(el, {
|
|
|
+ attributes: true,
|
|
|
+ })
|
|
|
+
|
|
|
+ el.click()
|
|
|
+ await nextTick()
|
|
|
+
|
|
|
+ expect(fn).toBeCalledTimes(0)
|
|
|
+ })
|
|
|
})
|