ssr.stream.spec.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import Vue from '../../dist/vue.common.js'
  2. import { compileToFunctions } from '../../dist/compiler.js'
  3. import createRenderer from '../../dist/server-renderer.js'
  4. const { renderToStream } = createRenderer()
  5. describe('SSR: renderToStream', () => {
  6. it('should render to a stream', done => {
  7. const stream = renderVmWithOptions({
  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. <test></test>
  15. </div>
  16. `,
  17. data: {
  18. test: 'hi',
  19. isRed: true
  20. },
  21. components: {
  22. test: {
  23. render: function () {
  24. return this.$createElement('div', { class: ['a'] }, 'hahahaha')
  25. }
  26. }
  27. }
  28. })
  29. let res = ''
  30. stream.on('data', chunk => {
  31. res += chunk
  32. })
  33. stream.on('end', () => {
  34. expect(res).toContain(
  35. '<div server-rendered="true">' +
  36. '<p class="hi">yoyo</p>' +
  37. '<div id="ho" class="red"></div>' +
  38. '<span>hi</span>' +
  39. '<input value="hi">' +
  40. '<div class="a">hahahaha</div>' +
  41. '</div>'
  42. )
  43. done()
  44. })
  45. })
  46. })
  47. function renderVmWithOptions (options) {
  48. const res = compileToFunctions(options.template, {
  49. preserveWhitespace: false
  50. })
  51. Object.assign(options, res)
  52. delete options.template
  53. return renderToStream(new Vue(options))
  54. }