From 94e80cf6d1428c1c42d4a37b8ac6170fa207d627 Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 29 Jan 2020 21:13:34 -0500 Subject: [PATCH] test(ssr): test scopeId handling in vdom serialization --- .../__tests__/renderToString.spec.ts | 39 ++++++++++++++++++- .../server-renderer/src/renderToString.ts | 2 +- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/packages/server-renderer/__tests__/renderToString.spec.ts b/packages/server-renderer/__tests__/renderToString.spec.ts index a41c4eed..1736d08f 100644 --- a/packages/server-renderer/__tests__/renderToString.spec.ts +++ b/packages/server-renderer/__tests__/renderToString.spec.ts @@ -1,4 +1,4 @@ -import { createApp, h, createCommentVNode } from 'vue' +import { createApp, h, createCommentVNode, withScopeId } from 'vue' import { renderToString, renderComponent, renderSlot, escapeHtml } from '../src' describe('ssr: renderToString', () => { @@ -327,6 +327,41 @@ describe('ssr: renderToString', () => { }) describe('scopeId', () => { - // TODO + // note: here we are only testing scopeId handling for vdom serialization. + // compiled srr render functions will include scopeId directly in strings. + const withId = withScopeId('data-v-test') + const withChildId = withScopeId('data-v-child') + + test('basic', async () => { + expect( + await renderToString( + withId(() => { + return h('div') + })() + ) + ).toBe(`
`) + }) + + test('with slots', async () => { + const Child = { + __scopeId: 'data-v-child', + render: withChildId(function(this: any) { + return h('div', this.$slots.default()) + }) + } + + const Parent = { + __scopeId: 'data-v-test', + render: withId(() => { + return h(Child, null, { + default: withId(() => h('span', 'slot')) + }) + }) + } + + expect(await renderToString(h(Parent))).toBe( + `
slot
` + ) + }) }) }) diff --git a/packages/server-renderer/src/renderToString.ts b/packages/server-renderer/src/renderToString.ts index 7cd7c25c..ebf96624 100644 --- a/packages/server-renderer/src/renderToString.ts +++ b/packages/server-renderer/src/renderToString.ts @@ -222,7 +222,7 @@ function renderElement( // vnode's own scopeId and the current rendering component's scopeId is // different - this is a slot content node. if (treeOwnerId != null && treeOwnerId !== scopeId) { - openTag += ` ${scopeId}-s` + openTag += ` ${treeOwnerId}-s` } }