diff --git a/examples/app-vitest-full/components/ExportDefaultReturnsRenderComponent.vue b/examples/app-vitest-full/components/ExportDefaultReturnsRenderComponent.vue index 3916f910c..74a79c8b5 100644 --- a/examples/app-vitest-full/components/ExportDefaultReturnsRenderComponent.vue +++ b/examples/app-vitest-full/components/ExportDefaultReturnsRenderComponent.vue @@ -7,10 +7,11 @@ export default { } }, setup(props) { + const pre = 'X' + props.myProp return () => h('div', [ h('h1', 'ExportDefaultReturnsRenderComponent'), h('pre', props.myProp), - h('pre', 'X' + props.myProp) + h('pre', pre) ]) }, } diff --git a/examples/app-vitest-full/tests/nuxt/mount-suspended.spec.ts b/examples/app-vitest-full/tests/nuxt/mount-suspended.spec.ts index e8341656d..de11d2ec4 100644 --- a/examples/app-vitest-full/tests/nuxt/mount-suspended.spec.ts +++ b/examples/app-vitest-full/tests/nuxt/mount-suspended.spec.ts @@ -138,12 +138,10 @@ describe.each(Object.entries(formats))(`%s`, (name, component) => { `.trim()) }) - // FIXME: https://github.com/nuxt/test-utils/issues/534 - it.todo('can be updated with setProps', async () => { - wrapper.setProps({ - title: 'updated title' + it.only('can be updated with setProps', async () => { + await wrapper.setProps({ + myProp: 'updated title' }) - await nextTick() expect(wrapper.html()).toEqual(`

${name}

updated title
XHello nuxt-vitest
diff --git a/src/runtime-utils/mount.ts b/src/runtime-utils/mount.ts index f1adb03ef..bb913c6d0 100644 --- a/src/runtime-utils/mount.ts +++ b/src/runtime-utils/mount.ts @@ -59,6 +59,7 @@ export async function mountSuspended( let setupContext: SetupContext let setupState: any + const setProps = reactive>({}) let passedProps: Record const wrappedSetup = async ( @@ -89,7 +90,10 @@ export async function mountSuspended( { onResolve: () => nextTick().then(() => { - (vm as any).setupState = setupState + (vm as any).setupState = setupState; + (vm as any).__setProps = (props: Record) => { + Object.assign(setProps, props) + } resolve(vm as any) }), }, @@ -122,7 +126,7 @@ export async function mountSuspended( setup: setup ? (props: Record) => wrappedSetup(props, setupContext) : undefined, } - return () => h(clonedComponent, { ...props, ...attrs }, slots) + return () => h(clonedComponent, { ...defu(setProps, props) as typeof props, ...attrs }, slots) }, }), }