diff --git a/packages/runtime-dom/__tests__/patchProps.spec.ts b/packages/runtime-dom/__tests__/patchProps.spec.ts index ce30f91162f..c01967145c2 100644 --- a/packages/runtime-dom/__tests__/patchProps.spec.ts +++ b/packages/runtime-dom/__tests__/patchProps.spec.ts @@ -75,4 +75,37 @@ describe('runtime-dom: props patching', () => { expect(root.innerHTML).toBe(`
bar
`) expect(fn).toHaveBeenCalled() }) + + // #1049 + test('set domProps where string is not accepted', () => { + const realCreateElement = document.createElement.bind(document) + const spyCreateElement = jest + .spyOn(document, 'createElement') + .mockImplementation(tagName => { + const el = realCreateElement(tagName) + let srcObject: any = undefined + Object.defineProperty(el, 'srcObject', { + enumerable: true, + set(v) { + if (typeof v === 'string') { + throw new TypeError( + `Failed to set the 'srcObject' property on 'HTMLMediaElement'` + ) + } + srcObject = v + }, + get() { + return srcObject + } + }) + return el + }) + + const el = document.createElement('video') + + patchProp(el, 'srcObject', undefined, null) + + expect(el.srcObject).toBeNull() + spyCreateElement.mockRestore() + }) }) diff --git a/packages/runtime-dom/src/modules/props.ts b/packages/runtime-dom/src/modules/props.ts index 0b36578eb88..c27aa8db4a0 100644 --- a/packages/runtime-dom/src/modules/props.ts +++ b/packages/runtime-dom/src/modules/props.ts @@ -32,6 +32,11 @@ export function patchDOMProp( // e.g.