From: daiwei Date: Mon, 17 Nov 2025 08:06:49 +0000 (+0800) Subject: test(runtime-vapor): add provide/inject tests for vdom interop X-Git-Tag: v3.6.0-alpha.5~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7ef6b39057aafe5977d945d01773d626b4040555;p=thirdparty%2Fvuejs%2Fcore.git test(runtime-vapor): add provide/inject tests for vdom interop --- diff --git a/packages/runtime-vapor/__tests__/apiInject.spec.ts b/packages/runtime-vapor/__tests__/apiInject.spec.ts index 845ec9e015..5050771506 100644 --- a/packages/runtime-vapor/__tests__/apiInject.spec.ts +++ b/packages/runtime-vapor/__tests__/apiInject.spec.ts @@ -1,6 +1,7 @@ import { type InjectionKey, type Ref, + h, hasInjectionContext, inject, nextTick, @@ -17,6 +18,7 @@ import { createVaporApp, defineVaporComponent, renderEffect, + vaporInteropPlugin, withVaporCtx, } from '../src' import { makeRender } from './_utils' @@ -422,3 +424,34 @@ describe('api: provide/inject', () => { }) }) }) + +describe('vdom interop', () => { + test('should inject value from vapor parent', async () => { + const VdomChild = { + setup() { + const foo = inject('foo') + return () => h('div', null, [toDisplayString(foo)]) + }, + } + + const value = ref('foo') + const App = defineVaporComponent({ + setup() { + provide('foo', value) + return createComponent(VdomChild as any) + }, + }) + + const root = document.createElement('div') + document.body.appendChild(root) + const app = createVaporApp(App) + app.use(vaporInteropPlugin) + app.mount(root) + + expect(root.innerHTML).toBe('
foo
') + + value.value = 'bar' + await nextTick() + expect(root.innerHTML).toBe('
bar
') + }) +}) diff --git a/packages/runtime-vapor/__tests__/vdomInterop.spec.ts b/packages/runtime-vapor/__tests__/vdomInterop.spec.ts index 546078c8bc..68861845c5 100644 --- a/packages/runtime-vapor/__tests__/vdomInterop.spec.ts +++ b/packages/runtime-vapor/__tests__/vdomInterop.spec.ts @@ -3,12 +3,14 @@ import { createVNode, defineComponent, h, + inject, nextTick, onActivated, onBeforeMount, onDeactivated, onMounted, onUnmounted, + provide, ref, renderSlot, toDisplayString, @@ -234,9 +236,32 @@ describe('vdomInterop', () => { }) }) - describe.todo('provide', () => {}) + describe('provide / inject', () => { + it('should inject value from vdom parent', async () => { + const VaporChild = defineVaporComponent({ + setup() { + const foo = inject('foo') + const n0 = template(' ')() as any + renderEffect(() => setText(n0, toDisplayString(foo))) + return n0 + }, + }) + + const value = ref('foo') + const { html } = define({ + setup() { + provide('foo', value) + return () => h(VaporChild as any) + }, + }).render() + + expect(html()).toBe('foo') - describe.todo('inject', () => {}) + value.value = 'bar' + await nextTick() + expect(html()).toBe('bar') + }) + }) describe.todo('template ref', () => {})