ssrDynamicComponent.spec.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { createApp, createVNode } from 'vue'
  2. import { renderToString } from '../src/renderToString'
  3. describe('ssr: dynamic component', () => {
  4. test('resolved to component', async () => {
  5. expect(
  6. await renderToString(
  7. createApp({
  8. components: {
  9. one: {
  10. template: `<div><slot/></div>`
  11. }
  12. },
  13. template: `<component :is="'one'"><span>slot</span></component>`
  14. })
  15. )
  16. ).toBe(`<div><!--[--><span>slot</span><!--]--></div>`)
  17. })
  18. test('resolve to element', async () => {
  19. expect(
  20. await renderToString(
  21. createApp({
  22. template: `<component :is="'p'"><span>slot</span></component>`
  23. })
  24. )
  25. ).toBe(`<p><span>slot</span></p>`)
  26. })
  27. test('resolve to component vnode', async () => {
  28. const Child = {
  29. props: ['id'],
  30. template: `<div>{{ id }}<slot/></div>`
  31. }
  32. expect(
  33. await renderToString(
  34. createApp({
  35. setup() {
  36. return {
  37. vnode: createVNode(Child, { id: 'test' })
  38. }
  39. },
  40. template: `<component :is="vnode"><span>slot</span></component>`
  41. })
  42. )
  43. ).toBe(`<div>test<!--[--><span>slot</span><!--]--></div>`)
  44. })
  45. test('resolve to element vnode', async () => {
  46. expect(
  47. await renderToString(
  48. createApp({
  49. setup() {
  50. return {
  51. vnode: createVNode('div', { id: 'test' })
  52. }
  53. },
  54. template: `<component :is="vnode"><span>slot</span></component>`
  55. })
  56. )
  57. ).toBe(`<div id="test"><span>slot</span></div>`)
  58. })
  59. })