|
|
@@ -6,6 +6,7 @@ import VueSSRClientPlugin from '../../packages/vue-server-renderer/client-plugin
|
|
|
import { createRenderer as createBundleRenderer } from './ssr-bundle-render.spec.js'
|
|
|
|
|
|
const defaultTemplate = `<html><head></head><body><!--vue-ssr-outlet--></body></html>`
|
|
|
+const interpolateTemplate = `<html><head><title>{{ title }}</title></head><body><!--vue-ssr-outlet-->{{{ snippet }}}</body></html>`
|
|
|
|
|
|
function generateClientManifest (file, cb) {
|
|
|
compileWithWebpack(file, {
|
|
|
@@ -65,6 +66,38 @@ describe('SSR: template option', () => {
|
|
|
}, context)
|
|
|
})
|
|
|
|
|
|
+ it('renderToString with interpolation', done => {
|
|
|
+ const renderer = createRenderer({
|
|
|
+ template: interpolateTemplate
|
|
|
+ })
|
|
|
+
|
|
|
+ const context = {
|
|
|
+ title: '<script>hacks</script>',
|
|
|
+ snippet: '<div>foo</div>',
|
|
|
+ head: '<meta name="viewport" content="width=device-width">',
|
|
|
+ styles: '<style>h1 { color: red }</style>',
|
|
|
+ state: { a: 1 }
|
|
|
+ }
|
|
|
+
|
|
|
+ renderer.renderToString(new Vue({
|
|
|
+ template: '<div>hi</div>'
|
|
|
+ }), (err, res) => {
|
|
|
+ expect(err).toBeNull()
|
|
|
+ expect(res).toContain(
|
|
|
+ `<html><head>` +
|
|
|
+ // double mustache should be escaped
|
|
|
+ `<title><script>hacks</script></title>` +
|
|
|
+ `${context.head}${context.styles}</head><body>` +
|
|
|
+ `<div data-server-rendered="true">hi</div>` +
|
|
|
+ `<script>window.__INITIAL_STATE__={"a":1}</script>` +
|
|
|
+ // triple should be raw
|
|
|
+ `<div>foo</div>` +
|
|
|
+ `</body></html>`
|
|
|
+ )
|
|
|
+ done()
|
|
|
+ }, context)
|
|
|
+ })
|
|
|
+
|
|
|
it('renderToStream', done => {
|
|
|
const renderer = createRenderer({
|
|
|
template: defaultTemplate
|
|
|
@@ -95,6 +128,43 @@ describe('SSR: template option', () => {
|
|
|
})
|
|
|
})
|
|
|
|
|
|
+ it('renderToStream with interpolation', done => {
|
|
|
+ const renderer = createRenderer({
|
|
|
+ template: interpolateTemplate
|
|
|
+ })
|
|
|
+
|
|
|
+ const context = {
|
|
|
+ title: '<script>hacks</script>',
|
|
|
+ snippet: '<div>foo</div>',
|
|
|
+ head: '<meta name="viewport" content="width=device-width">',
|
|
|
+ styles: '<style>h1 { color: red }</style>',
|
|
|
+ state: { a: 1 }
|
|
|
+ }
|
|
|
+
|
|
|
+ const stream = renderer.renderToStream(new Vue({
|
|
|
+ template: '<div>hi</div>'
|
|
|
+ }), context)
|
|
|
+
|
|
|
+ let res = ''
|
|
|
+ stream.on('data', chunk => {
|
|
|
+ res += chunk
|
|
|
+ })
|
|
|
+ stream.on('end', () => {
|
|
|
+ expect(res).toContain(
|
|
|
+ `<html><head>` +
|
|
|
+ // double mustache should be escaped
|
|
|
+ `<title><script>hacks</script></title>` +
|
|
|
+ `${context.head}${context.styles}</head><body>` +
|
|
|
+ `<div data-server-rendered="true">hi</div>` +
|
|
|
+ `<script>window.__INITIAL_STATE__={"a":1}</script>` +
|
|
|
+ // triple should be raw
|
|
|
+ `<div>foo</div>` +
|
|
|
+ `</body></html>`
|
|
|
+ )
|
|
|
+ done()
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
it('bundleRenderer + renderToString', done => {
|
|
|
createBundleRenderer('app.js', {
|
|
|
asBundle: true,
|
|
|
@@ -204,6 +274,24 @@ describe('SSR: template option', () => {
|
|
|
})
|
|
|
})
|
|
|
|
|
|
+ it('bundleRenderer + renderToString + clientManifest + inject: false', done => {
|
|
|
+ createRendererWithManifest('split.js', {
|
|
|
+ runInNewContext,
|
|
|
+ template: `<html>` +
|
|
|
+ `<head>{{{ renderLinks() }}}</head>` +
|
|
|
+ `<body><!--vue-ssr-outlet-->{{{ renderScripts() }}}</body>` +
|
|
|
+ `</html>`,
|
|
|
+ inject: false
|
|
|
+ }, renderer => {
|
|
|
+ const context = {}
|
|
|
+ renderer.renderToString(context, (err, res) => {
|
|
|
+ expect(err).toBeNull()
|
|
|
+ expect(res).toContain(expectedHTMLWithManifest(false))
|
|
|
+ done()
|
|
|
+ })
|
|
|
+ })
|
|
|
+ })
|
|
|
+
|
|
|
it('bundleRenderer + renderToString + clientManifest + no template', done => {
|
|
|
createRendererWithManifest('split.js', {
|
|
|
runInNewContext,
|
|
|
@@ -215,8 +303,7 @@ describe('SSR: template option', () => {
|
|
|
|
|
|
const customOutput =
|
|
|
`<html><head>${
|
|
|
- context.renderPreloadLinks() +
|
|
|
- context.renderPrefetchLinks()
|
|
|
+ context.renderLinks()
|
|
|
}</head><body>${
|
|
|
res +
|
|
|
context.renderScripts()
|