import { createApp, h, Portal } from 'vue' import { renderToString, SSRContext } from '../src/renderToString' import { ssrRenderPortal } from '../src/helpers/ssrRenderPortal' describe('ssrRenderPortal', () => { test('portal rendering (compiled)', async () => { const ctx: SSRContext = {} const html = await renderToString( createApp({ data() { return { msg: 'hello' } }, ssrRender(_ctx, _push, _parent) { ssrRenderPortal( _push, _push => { _push(`
content
`) }, '#target', false, _parent ) } }), ctx ) expect(html).toBe('') expect(ctx.portals!['#target']).toBe(`
content
`) }) test('portal rendering (compiled + disabled)', async () => { const ctx: SSRContext = {} const html = await renderToString( createApp({ data() { return { msg: 'hello' } }, ssrRender(_ctx, _push, _parent) { ssrRenderPortal( _push, _push => { _push(`
content
`) }, '#target', true, _parent ) } }), ctx ) expect(html).toBe('
content
') expect(ctx.portals!['#target']).toBe(``) }) test('portal rendering (vnode)', async () => { const ctx: SSRContext = {} const html = await renderToString( h( Portal, { target: `#target` }, h('span', 'hello') ), ctx ) expect(html).toBe('') expect(ctx.portals!['#target']).toBe('hello') }) test('portal rendering (vnode + disabled)', async () => { const ctx: SSRContext = {} const html = await renderToString( h( Portal, { target: `#target`, disabled: true }, h('span', 'hello') ), ctx ) expect(html).toBe('hello') expect(ctx.portals!['#target']).toBe(``) }) test('multiple portals with same target', async () => { const ctx: SSRContext = {} const html = await renderToString( h('div', [ h( Portal, { target: `#target` }, h('span', 'hello') ), h(Portal, { target: `#target` }, 'world') ]), ctx ) expect(html).toBe( '
' ) expect(ctx.portals!['#target']).toBe( 'helloworld' ) }) })