ssr-basic-renderer.spec.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // @vitest-environment node
  2. import Vue from 'vue'
  3. import renderToString from 'server/index-basic'
  4. describe('SSR: basicRenderer', () => {
  5. it('should work', done => {
  6. renderToString(
  7. new Vue({
  8. template: `
  9. <div>
  10. <p class="hi">yoyo</p>
  11. <div id="ho" :class="{ red: isRed }"></div>
  12. <span>{{ test }}</span>
  13. <input :value="test">
  14. <img :src="imageUrl">
  15. <test></test>
  16. <test-async></test-async>
  17. </div>
  18. `,
  19. data: {
  20. test: 'hi',
  21. isRed: true,
  22. imageUrl: 'https://vuejs.org/images/logo.png'
  23. },
  24. components: {
  25. test: {
  26. render() {
  27. return this.$createElement('div', { class: ['a'] }, 'test')
  28. }
  29. },
  30. testAsync(resolve) {
  31. resolve({
  32. render() {
  33. return this.$createElement(
  34. 'span',
  35. { class: ['b'] },
  36. 'testAsync'
  37. )
  38. }
  39. })
  40. }
  41. }
  42. }),
  43. (err, result) => {
  44. expect(err).toBeNull()
  45. expect(result).toContain(
  46. '<div data-server-rendered="true">' +
  47. '<p class="hi">yoyo</p> ' +
  48. '<div id="ho" class="red"></div> ' +
  49. '<span>hi</span> ' +
  50. '<input value="hi"> ' +
  51. '<img src="https://vuejs.org/images/logo.png"> ' +
  52. '<div class="a">test</div> ' +
  53. '<span class="b">testAsync</span>' +
  54. '</div>'
  55. )
  56. done()
  57. }
  58. )
  59. })
  60. // #5941
  61. it('should work properly when accessing $ssrContext in root component', done => {
  62. let ssrContext
  63. renderToString(
  64. new Vue({
  65. template: `
  66. <div></div>
  67. `,
  68. created() {
  69. ssrContext = this.$ssrContext
  70. }
  71. }),
  72. err => {
  73. expect(err).toBeNull()
  74. expect(ssrContext).toBeUndefined()
  75. done()
  76. }
  77. )
  78. })
  79. })