ssrTransitionGroup.spec.ts 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import { compile } from '../src'
  2. // transition-group should flatten and concat its children fragments into
  3. // a single one
  4. describe('transition-group', () => {
  5. test('basic', () => {
  6. expect(
  7. compile(`<transition-group><div v-for="i in list"/></transition-group>`)
  8. .code,
  9. ).toMatchInlineSnapshot(`
  10. "const { ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
  11. return function ssrRender(_ctx, _push, _parent, _attrs) {
  12. _push(\`<!--[-->\`)
  13. _ssrRenderList(_ctx.list, (i) => {
  14. _push(\`<div></div>\`)
  15. })
  16. _push(\`<!--]-->\`)
  17. }"
  18. `)
  19. })
  20. test('with static tag', () => {
  21. expect(
  22. compile(
  23. `<transition-group tag="ul"><div v-for="i in list"/></transition-group>`,
  24. ).code,
  25. ).toMatchInlineSnapshot(`
  26. "const { ssrRenderAttrs: _ssrRenderAttrs, ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
  27. return function ssrRender(_ctx, _push, _parent, _attrs) {
  28. _push(\`<ul\${_ssrRenderAttrs(_attrs)}>\`)
  29. _ssrRenderList(_ctx.list, (i) => {
  30. _push(\`<div></div>\`)
  31. })
  32. _push(\`</ul>\`)
  33. }"
  34. `)
  35. })
  36. // #11514
  37. test('with static tag + comment', () => {
  38. expect(
  39. compile(
  40. `<transition-group tag="ul"><div v-for="i in list"/><div v-if="false"></div></transition-group>`,
  41. ).code,
  42. ).toMatchInlineSnapshot(`
  43. "const { ssrRenderAttrs: _ssrRenderAttrs, ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
  44. return function ssrRender(_ctx, _push, _parent, _attrs) {
  45. _push(\`<ul\${_ssrRenderAttrs(_attrs)}>\`)
  46. _ssrRenderList(_ctx.list, (i) => {
  47. _push(\`<div></div>\`)
  48. })
  49. if (false) {
  50. _push(\`<div></div>\`)
  51. }
  52. _push(\`</ul>\`)
  53. }"
  54. `)
  55. })
  56. test('with dynamic tag', () => {
  57. expect(
  58. compile(
  59. `<transition-group :tag="someTag"><div v-for="i in list"/></transition-group>`,
  60. ).code,
  61. ).toMatchInlineSnapshot(`
  62. "const { ssrRenderAttrs: _ssrRenderAttrs, ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
  63. return function ssrRender(_ctx, _push, _parent, _attrs) {
  64. _push(\`<\${
  65. _ctx.someTag
  66. }\${
  67. _ssrRenderAttrs(_attrs)
  68. }>\`)
  69. _ssrRenderList(_ctx.list, (i) => {
  70. _push(\`<div></div>\`)
  71. })
  72. _push(\`</\${_ctx.someTag}>\`)
  73. }"
  74. `)
  75. })
  76. test('with multi fragments children', () => {
  77. expect(
  78. compile(
  79. `<transition-group>
  80. <div v-for="i in 10"/>
  81. <div v-for="i in 10"/>
  82. <template v-if="ok"><div>ok</div></template>
  83. </transition-group>`,
  84. ).code,
  85. ).toMatchInlineSnapshot(`
  86. "const { ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
  87. return function ssrRender(_ctx, _push, _parent, _attrs) {
  88. _push(\`<!--[-->\`)
  89. _ssrRenderList(10, (i) => {
  90. _push(\`<div></div>\`)
  91. })
  92. _ssrRenderList(10, (i) => {
  93. _push(\`<div></div>\`)
  94. })
  95. if (_ctx.ok) {
  96. _push(\`<div>ok</div>\`)
  97. }
  98. _push(\`<!--]-->\`)
  99. }"
  100. `)
  101. })
  102. test('attribute fallthrough', () => {
  103. expect(
  104. compile(
  105. `<transition-group tag="ul" class="red" id="ok">
  106. </transition-group>`,
  107. ).code,
  108. ).toMatchInlineSnapshot(`
  109. "const { mergeProps: _mergeProps } = require("vue")
  110. const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
  111. return function ssrRender(_ctx, _push, _parent, _attrs) {
  112. _push(\`<ul\${_ssrRenderAttrs(_mergeProps({
  113. class: "red",
  114. id: "ok"
  115. }, _attrs))}></ul>\`)
  116. }"
  117. `)
  118. })
  119. })