ssrVIf.spec.ts 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. import { compile } from '../src'
  2. describe('ssr: v-if', () => {
  3. test('basic', () => {
  4. expect(compile(`<div v-if="foo"></div>`).code).toMatchInlineSnapshot(`
  5. "const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
  6. return function ssrRender(_ctx, _push, _parent, _attrs) {
  7. if (_ctx.foo) {
  8. _push(\`<div\${_ssrRenderAttrs(_attrs)}></div>\`)
  9. } else {
  10. _push(\`<!---->\`)
  11. }
  12. }"
  13. `)
  14. })
  15. test('with nested content', () => {
  16. expect(compile(`<div v-if="foo">hello<span>ok</span></div>`).code)
  17. .toMatchInlineSnapshot(`
  18. "const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
  19. return function ssrRender(_ctx, _push, _parent, _attrs) {
  20. if (_ctx.foo) {
  21. _push(\`<div\${_ssrRenderAttrs(_attrs)}>hello<span>ok</span></div>\`)
  22. } else {
  23. _push(\`<!---->\`)
  24. }
  25. }"
  26. `)
  27. })
  28. test('v-if + v-else', () => {
  29. expect(compile(`<div v-if="foo"/><span v-else/>`).code)
  30. .toMatchInlineSnapshot(`
  31. "const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
  32. return function ssrRender(_ctx, _push, _parent, _attrs) {
  33. if (_ctx.foo) {
  34. _push(\`<div\${_ssrRenderAttrs(_attrs)}></div>\`)
  35. } else {
  36. _push(\`<span\${_ssrRenderAttrs(_attrs)}></span>\`)
  37. }
  38. }"
  39. `)
  40. })
  41. test('v-if + v-else-if', () => {
  42. expect(compile(`<div v-if="foo"/><span v-else-if="bar"/>`).code)
  43. .toMatchInlineSnapshot(`
  44. "const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
  45. return function ssrRender(_ctx, _push, _parent, _attrs) {
  46. if (_ctx.foo) {
  47. _push(\`<div\${_ssrRenderAttrs(_attrs)}></div>\`)
  48. } else if (_ctx.bar) {
  49. _push(\`<span\${_ssrRenderAttrs(_attrs)}></span>\`)
  50. } else {
  51. _push(\`<!---->\`)
  52. }
  53. }"
  54. `)
  55. })
  56. test('v-if + v-else-if + v-else', () => {
  57. expect(compile(`<div v-if="foo"/><span v-else-if="bar"/><p v-else/>`).code)
  58. .toMatchInlineSnapshot(`
  59. "const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
  60. return function ssrRender(_ctx, _push, _parent, _attrs) {
  61. if (_ctx.foo) {
  62. _push(\`<div\${_ssrRenderAttrs(_attrs)}></div>\`)
  63. } else if (_ctx.bar) {
  64. _push(\`<span\${_ssrRenderAttrs(_attrs)}></span>\`)
  65. } else {
  66. _push(\`<p\${_ssrRenderAttrs(_attrs)}></p>\`)
  67. }
  68. }"
  69. `)
  70. })
  71. test('<template v-if> (text)', () => {
  72. expect(compile(`<template v-if="foo">hello</template>`).code)
  73. .toMatchInlineSnapshot(`
  74. "
  75. return function ssrRender(_ctx, _push, _parent, _attrs) {
  76. if (_ctx.foo) {
  77. _push(\`<!--[-->hello<!--]-->\`)
  78. } else {
  79. _push(\`<!---->\`)
  80. }
  81. }"
  82. `)
  83. })
  84. test('<template v-if> (single element)', () => {
  85. // single element should not wrap with fragment
  86. expect(compile(`<template v-if="foo"><div>hi</div></template>`).code)
  87. .toMatchInlineSnapshot(`
  88. "const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
  89. return function ssrRender(_ctx, _push, _parent, _attrs) {
  90. if (_ctx.foo) {
  91. _push(\`<div\${_ssrRenderAttrs(_attrs)}>hi</div>\`)
  92. } else {
  93. _push(\`<!---->\`)
  94. }
  95. }"
  96. `)
  97. })
  98. test('<template v-if> (multiple element)', () => {
  99. expect(
  100. compile(`<template v-if="foo"><div>hi</div><div>ho</div></template>`)
  101. .code,
  102. ).toMatchInlineSnapshot(`
  103. "
  104. return function ssrRender(_ctx, _push, _parent, _attrs) {
  105. if (_ctx.foo) {
  106. _push(\`<!--[--><div>hi</div><div>ho</div><!--]-->\`)
  107. } else {
  108. _push(\`<!---->\`)
  109. }
  110. }"
  111. `)
  112. })
  113. test('<template v-if> (with v-for inside)', () => {
  114. expect(
  115. compile(`<template v-if="foo"><div v-for="i in list"/></template>`).code,
  116. ).toMatchInlineSnapshot(`
  117. "const { ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
  118. return function ssrRender(_ctx, _push, _parent, _attrs) {
  119. if (_ctx.foo) {
  120. _push(\`<!--[-->\`)
  121. _ssrRenderList(_ctx.list, (i) => {
  122. _push(\`<div></div>\`)
  123. })
  124. _push(\`<!--]-->\`)
  125. } else {
  126. _push(\`<!---->\`)
  127. }
  128. }"
  129. `)
  130. })
  131. test('<template v-if> + normal v-else', () => {
  132. expect(
  133. compile(
  134. `<template v-if="foo"><div>hi</div><div>ho</div></template><div v-else/>`,
  135. ).code,
  136. ).toMatchInlineSnapshot(`
  137. "const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
  138. return function ssrRender(_ctx, _push, _parent, _attrs) {
  139. if (_ctx.foo) {
  140. _push(\`<!--[--><div>hi</div><div>ho</div><!--]-->\`)
  141. } else {
  142. _push(\`<div\${_ssrRenderAttrs(_attrs)}></div>\`)
  143. }
  144. }"
  145. `)
  146. })
  147. })