Skip to content

Commit f2d3def

Browse files
authored
feat(runtime-utils): support rerender behavior in renderSuspended (#1466)
1 parent a2afc9d commit f2d3def

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

examples/app-vitest-full/tests/nuxt/render-suspended.spec.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,24 @@ describe.each(Object.entries(formats))(`%s`, (name, component) => {
253253
<div>
254254
<h1>${name}</h1><pre>Hello nuxt-vitest</pre><pre>XHello nuxt-vitest</pre><span>myObjProp: {"title":"Hello nuxt/test-utils"}</span>
255255
</div>
256+
</div>
257+
`.trim())
258+
})
259+
260+
it('rerender props', async () => {
261+
const wrapper = await renderSuspended(component, {
262+
props: {
263+
myProp: 'init',
264+
},
265+
})
266+
267+
await wrapper.rerender({ myProp: 'change' })
268+
269+
expect(wrapper.html()).toEqual(`
270+
<div id="test-wrapper">
271+
<div>
272+
<h1>${name}</h1><pre>change</pre><pre>Xinit</pre><span>myObjProp: {}</span>
273+
</div>
256274
</div>
257275
`.trim())
258276
})

src/runtime-utils/render.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ export async function renderSuspended<T>(component: T, options?: RenderOptions<T
6666

6767
let setupContext: SetupContext
6868
let setupState: SetupState
69+
const setProps = reactive<Record<string, unknown>>({})
6970

7071
let interceptedEmit: Emit | null = null
7172
/**
@@ -161,6 +162,10 @@ export async function renderSuspended<T>(component: T, options?: RenderOptions<T
161162
onResolve: () =>
162163
nextTick().then(() => {
163164
(utils as unknown as AugmentedVueInstance).setupState = setupState
165+
utils.rerender = async (props) => {
166+
Object.assign(setProps, props)
167+
await nextTick()
168+
}
164169
resolve(utils as ReturnType<typeof renderFromTestingLibrary> & { setupState: SetupState })
165170
}),
166171
},
@@ -232,7 +237,7 @@ export async function renderSuspended<T>(component: T, options?: RenderOptions<T
232237
setup: (props: Record<string, unknown>) => wrappedSetup(props, setupContext),
233238
}
234239

235-
return () => h(clonedComponent, { ...(props && typeof props === 'object' ? props : {}), ...attrs }, slots)
240+
return () => h(clonedComponent, { ...(props && typeof props === 'object' ? props : {}), ...setProps, ...attrs }, slots)
236241
},
237242
}),
238243
},

0 commit comments

Comments
 (0)