const el = document.createElement('div')
patchProp(el, 'id', null, 'foo')
expect(el.id).toBe('foo')
+ // prop with string value should be set to empty string on null values
patchProp(el, 'id', null, null)
expect(el.id).toBe('')
})
expect(root.innerHTML).toBe(`<div>bar</div>`)
expect(fn).toHaveBeenCalled()
})
+
+ // #1049
+ test('set value as-is for non string-value props', () => {
+ const el = document.createElement('video')
+ // jsdom doesn't really support video playback. srcObject in a real browser
+ // should default to `null`, but in jsdom it's `undefined`.
+ // anyway, here we just want to make sure Vue doesn't set non-string props
+ // to an empty string on nullish values - it should reset to its default
+ // value.
+ const intiialValue = el.srcObject
+ const fakeObject = {}
+ patchProp(el, 'srcObject', null, fakeObject)
+ expect(el.srcObject).not.toBe(fakeObject)
+ patchProp(el, 'srcObject', null, null)
+ expect(el.srcObject).toBe(intiialValue)
+ })
})
if (value === '' && typeof el[key] === 'boolean') {
// e.g. <select multiple> compiles to { multiple: '' }
el[key] = true
+ } else if (value == null && typeof el[key] === 'string') {
+ // e.g. <div :id="null">
+ el[key] = ''
} else {
- el[key] = value == null ? '' : value
+ el[key] = value
}
}