ssrDynamicComponent.spec.ts 1.6 KB

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