diff --git a/packages/runtime-vapor/__tests__/vdomInterop.spec.ts b/packages/runtime-vapor/__tests__/vdomInterop.spec.ts index 08326d4d5d9..f70b7439e5c 100644 --- a/packages/runtime-vapor/__tests__/vdomInterop.spec.ts +++ b/packages/runtime-vapor/__tests__/vdomInterop.spec.ts @@ -5,7 +5,26 @@ import { createComponent, defineVaporComponent } from '../src' const define = makeInteropRender() describe('vdomInterop', () => { - describe.todo('props', () => {}) + describe('props', () => { + test('prevent hasOwnProperty error when props is null', () => { + const VaporChild = defineVaporComponent({ + props: { + msg: String, + }, + setup(_, { attrs }) { + return [document.createTextNode(attrs.class || 'foo')] + }, + }) + + const { html } = define({ + setup() { + return () => h(VaporChild as any) + }, + }).render() + + expect(html()).toBe('foo') + }) + }) describe.todo('emit', () => {}) diff --git a/packages/runtime-vapor/src/componentProps.ts b/packages/runtime-vapor/src/componentProps.ts index 9cf65c57143..b43801272e2 100644 --- a/packages/runtime-vapor/src/componentProps.ts +++ b/packages/runtime-vapor/src/componentProps.ts @@ -186,7 +186,7 @@ export function getAttrFromRawProps(rawProps: RawProps, key: string): unknown { source = dynamicSources[i] isDynamic = isFunction(source) source = isDynamic ? (source as Function)() : source - if (hasOwn(source, key)) { + if (source && hasOwn(source, key)) { const value = isDynamic ? source[key] : source[key]() if (merged) { merged.push(value)