ssrSlotOutlet.spec.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import { compile } from '../src'
  2. describe('ssr: <slot>', () => {
  3. test('basic', () => {
  4. expect(compile(`<slot/>`).code).toMatchInlineSnapshot(`
  5. "const { ssrRenderSlot: _ssrRenderSlot } = require(\\"vue/server-renderer\\")
  6. return function ssrRender(_ctx, _push, _parent, _attrs) {
  7. _ssrRenderSlot(_ctx.$slots, \\"default\\", {}, null, _push, _parent)
  8. }"
  9. `)
  10. })
  11. test('with name', () => {
  12. expect(compile(`<slot name="foo" />`).code).toMatchInlineSnapshot(`
  13. "const { ssrRenderSlot: _ssrRenderSlot } = require(\\"vue/server-renderer\\")
  14. return function ssrRender(_ctx, _push, _parent, _attrs) {
  15. _ssrRenderSlot(_ctx.$slots, \\"foo\\", {}, null, _push, _parent)
  16. }"
  17. `)
  18. })
  19. test('with dynamic name', () => {
  20. expect(compile(`<slot :name="bar.baz" />`).code).toMatchInlineSnapshot(`
  21. "const { ssrRenderSlot: _ssrRenderSlot } = require(\\"vue/server-renderer\\")
  22. return function ssrRender(_ctx, _push, _parent, _attrs) {
  23. _ssrRenderSlot(_ctx.$slots, _ctx.bar.baz, {}, null, _push, _parent)
  24. }"
  25. `)
  26. })
  27. test('with props', () => {
  28. expect(compile(`<slot name="foo" :p="1" bar="2" />`).code)
  29. .toMatchInlineSnapshot(`
  30. "const { ssrRenderSlot: _ssrRenderSlot } = require(\\"vue/server-renderer\\")
  31. return function ssrRender(_ctx, _push, _parent, _attrs) {
  32. _ssrRenderSlot(_ctx.$slots, \\"foo\\", {
  33. p: 1,
  34. bar: \\"2\\"
  35. }, null, _push, _parent)
  36. }"
  37. `)
  38. })
  39. test('with fallback', () => {
  40. expect(compile(`<slot>some {{ fallback }} content</slot>`).code)
  41. .toMatchInlineSnapshot(`
  42. "const { ssrRenderSlot: _ssrRenderSlot, ssrInterpolate: _ssrInterpolate } = require(\\"vue/server-renderer\\")
  43. return function ssrRender(_ctx, _push, _parent, _attrs) {
  44. _ssrRenderSlot(_ctx.$slots, \\"default\\", {}, () => {
  45. _push(\`some \${_ssrInterpolate(_ctx.fallback)} content\`)
  46. }, _push, _parent)
  47. }"
  48. `)
  49. })
  50. test('with scopeId', async () => {
  51. expect(
  52. compile(`<slot/>`, {
  53. scopeId: 'hello'
  54. }).code
  55. ).toMatchInlineSnapshot(`
  56. "const { ssrRenderSlot: _ssrRenderSlot } = require(\\"vue/server-renderer\\")
  57. return function ssrRender(_ctx, _push, _parent, _attrs) {
  58. _ssrRenderSlot(_ctx.$slots, \\"default\\", {}, null, _push, _parent, \\"hello-s\\")
  59. }"
  60. `)
  61. })
  62. test('with scopeId + slotted:false', async () => {
  63. expect(
  64. compile(`<slot/>`, {
  65. scopeId: 'hello',
  66. slotted: false
  67. }).code
  68. ).toMatchInlineSnapshot(`
  69. "const { ssrRenderSlot: _ssrRenderSlot } = require(\\"vue/server-renderer\\")
  70. return function ssrRender(_ctx, _push, _parent, _attrs) {
  71. _ssrRenderSlot(_ctx.$slots, \\"default\\", {}, null, _push, _parent)
  72. }"
  73. `)
  74. })
  75. test('with forwarded scopeId', async () => {
  76. expect(
  77. compile(`<Comp><slot/></Comp>`, {
  78. scopeId: 'hello'
  79. }).code
  80. ).toMatchInlineSnapshot(`
  81. "const { resolveComponent: _resolveComponent, withCtx: _withCtx, renderSlot: _renderSlot } = require(\\"vue\\")
  82. const { ssrRenderSlot: _ssrRenderSlot, ssrRenderComponent: _ssrRenderComponent } = require(\\"vue/server-renderer\\")
  83. return function ssrRender(_ctx, _push, _parent, _attrs) {
  84. const _component_Comp = _resolveComponent(\\"Comp\\")
  85. _push(_ssrRenderComponent(_component_Comp, _attrs, {
  86. default: _withCtx((_, _push, _parent, _scopeId) => {
  87. if (_push) {
  88. _ssrRenderSlot(_ctx.$slots, \\"default\\", {}, null, _push, _parent, \\"hello-s\\" + _scopeId)
  89. } else {
  90. return [
  91. _renderSlot(_ctx.$slots, \\"default\\")
  92. ]
  93. }
  94. }),
  95. _: 3 /* FORWARDED */
  96. }, _parent))
  97. }"
  98. `)
  99. })
  100. })