From: daiwei Date: Mon, 30 Sep 2024 03:03:48 +0000 (+0800) Subject: test: add test case X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fheads%2Fedison%2Ffix%2F4930;p=thirdparty%2Fvuejs%2Fcore.git test: add test case --- diff --git a/packages/runtime-core/__tests__/rendererTemplateRef.spec.ts b/packages/runtime-core/__tests__/rendererTemplateRef.spec.ts index 799108dca8..62aebd1a99 100644 --- a/packages/runtime-core/__tests__/rendererTemplateRef.spec.ts +++ b/packages/runtime-core/__tests__/rendererTemplateRef.spec.ts @@ -1,4 +1,5 @@ import { + Suspense, defineComponent, h, nextTick, @@ -537,4 +538,39 @@ describe('api: template refs', () => { '
[object Object],[object Object]
', ) }) + + it('with async component', async () => { + const deps: Promise[] = [] + const spy = vi.fn() + + const AsyncChild = defineComponent({ + async setup(_, { expose }) { + const p = new Promise(r => setTimeout(r, 1)) + deps.push(p.then(() => Promise.resolve())) + await p + expose({ foo: spy }) + return () => h('div', 'child') + }, + }) + + const childRef = ref(null) + const App = { + setup() { + return { refKey: childRef } + }, + render() { + return h(Suspense, null, { default: h(AsyncChild, { ref: 'refKey' }) }) + }, + } + + const root = nodeOps.createElement('div') + render(h(App), root) + + await Promise.all(deps) + await nextTick() + + expect((childRef.value as any).foo).toBe(spy) + ;(childRef.value as any).foo() + expect(spy).toBeCalledTimes(1) + }) })