ssrInjectCssVars.spec.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import { compile } from '../src'
  2. describe('ssr: inject <style vars>', () => {
  3. test('basic', () => {
  4. expect(
  5. compile(`<div/>`, {
  6. ssrCssVars: `{ color }`
  7. }).code
  8. ).toMatchInlineSnapshot(`
  9. "const { mergeProps: _mergeProps } = require(\\"vue\\")
  10. const { ssrRenderAttrs: _ssrRenderAttrs } = require(\\"vue/server-renderer\\")
  11. return function ssrRender(_ctx, _push, _parent, _attrs) {
  12. const _cssVars = { style: { color: _ctx.color }}
  13. _push(\`<div\${_ssrRenderAttrs(_mergeProps(_attrs, _cssVars))}></div>\`)
  14. }"
  15. `)
  16. })
  17. test('fragment', () => {
  18. expect(
  19. compile(`<div/><div/>`, {
  20. ssrCssVars: `{ color }`
  21. }).code
  22. ).toMatchInlineSnapshot(`
  23. "const { ssrRenderAttrs: _ssrRenderAttrs } = require(\\"vue/server-renderer\\")
  24. return function ssrRender(_ctx, _push, _parent, _attrs) {
  25. const _cssVars = { style: { color: _ctx.color }}
  26. _push(\`<!--[--><div\${
  27. _ssrRenderAttrs(_cssVars)
  28. }></div><div\${
  29. _ssrRenderAttrs(_cssVars)
  30. }></div><!--]-->\`)
  31. }"
  32. `)
  33. })
  34. test('passing on to components', () => {
  35. expect(
  36. compile(`<div/><foo/>`, {
  37. ssrCssVars: `{ color }`
  38. }).code
  39. ).toMatchInlineSnapshot(`
  40. "const { resolveComponent: _resolveComponent } = require(\\"vue\\")
  41. const { ssrRenderAttrs: _ssrRenderAttrs, ssrRenderComponent: _ssrRenderComponent } = require(\\"vue/server-renderer\\")
  42. return function ssrRender(_ctx, _push, _parent, _attrs) {
  43. const _component_foo = _resolveComponent(\\"foo\\")
  44. const _cssVars = { style: { color: _ctx.color }}
  45. _push(\`<!--[--><div\${_ssrRenderAttrs(_cssVars)}></div>\`)
  46. _push(_ssrRenderComponent(_component_foo, _cssVars, null, _parent))
  47. _push(\`<!--]-->\`)
  48. }"
  49. `)
  50. })
  51. test('v-if branches', () => {
  52. expect(
  53. compile(`<div v-if="ok"/><template v-else><div/><div/></template>`, {
  54. ssrCssVars: `{ color }`
  55. }).code
  56. ).toMatchInlineSnapshot(`
  57. "const { mergeProps: _mergeProps } = require(\\"vue\\")
  58. const { ssrRenderAttrs: _ssrRenderAttrs } = require(\\"vue/server-renderer\\")
  59. return function ssrRender(_ctx, _push, _parent, _attrs) {
  60. const _cssVars = { style: { color: _ctx.color }}
  61. if (_ctx.ok) {
  62. _push(\`<div\${_ssrRenderAttrs(_mergeProps(_attrs, _cssVars))}></div>\`)
  63. } else {
  64. _push(\`<!--[--><div\${
  65. _ssrRenderAttrs(_cssVars)
  66. }></div><div\${
  67. _ssrRenderAttrs(_cssVars)
  68. }></div><!--]-->\`)
  69. }
  70. }"
  71. `)
  72. })
  73. test('w/ suspense', () => {
  74. expect(
  75. compile(
  76. `<Suspense>
  77. <div>ok</div>
  78. <template #fallback>
  79. <div>fallback</div>
  80. </template>
  81. </Suspense>`,
  82. {
  83. ssrCssVars: `{ color }`
  84. }
  85. ).code
  86. ).toMatchInlineSnapshot(`
  87. "const { withCtx: _withCtx } = require(\\"vue\\")
  88. const { ssrRenderAttrs: _ssrRenderAttrs, ssrRenderSuspense: _ssrRenderSuspense } = require(\\"vue/server-renderer\\")
  89. return function ssrRender(_ctx, _push, _parent, _attrs) {
  90. const _cssVars = { style: { color: _ctx.color }}
  91. _ssrRenderSuspense(_push, {
  92. fallback: () => {
  93. _push(\`<div\${_ssrRenderAttrs(_cssVars)}>fallback</div>\`)
  94. },
  95. default: () => {
  96. _push(\`<div\${_ssrRenderAttrs(_cssVars)}>ok</div>\`)
  97. },
  98. _: 1 /* STABLE */
  99. })
  100. }"
  101. `)
  102. })
  103. })