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