test(ssr): test scopeId handling in vdom serialization

This commit is contained in:
Evan You 2020-01-29 21:13:34 -05:00
parent 9cf4518936
commit 94e80cf6d1
2 changed files with 38 additions and 3 deletions

View File

@ -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(`<div data-v-test></div>`)
})
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(
`<div data-v-child><span data-v-test data-v-child-s>slot</span></div>`
)
})
})
})

View File

@ -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`
}
}