@@ -219,22 +219,24 @@ describe('SSR: template option', () => {
219219 } )
220220 } )
221221
222- const expectedHTMLWithManifest = preloadOtherAssets =>
222+ const expectedHTMLWithManifest = ( options = { } ) =>
223223 `<html><head>` +
224224 // used chunks should have preload
225225 `<link rel="preload" href="/manifest.js" as="script">` +
226226 `<link rel="preload" href="/main.js" as="script">` +
227227 `<link rel="preload" href="/0.js" as="script">` +
228228 `<link rel="preload" href="/test.css" as="style">` +
229229 // images and fonts are only preloaded when explicitly asked for
230- ( preloadOtherAssets ? `<link rel="preload" href="/test.png" as="image">` : `` ) +
231- ( preloadOtherAssets ? `<link rel="preload" href="/test.woff2" as="font" type="font/woff2" crossorigin>` : `` ) +
230+ ( options . preloadOtherAssets ? `<link rel="preload" href="/test.png" as="image">` : `` ) +
231+ ( options . preloadOtherAssets ? `<link rel="preload" href="/test.woff2" as="font" type="font/woff2" crossorigin>` : `` ) +
232232 // unused chunks should have prefetch
233233 `<link rel="prefetch" href="/1.js" as="script">` +
234234 // css assets should be loaded
235235 `<link rel="stylesheet" href="/test.css">` +
236236 `</head><body>` +
237237 `<div data-server-rendered="true"><div>async test.woff2 test.png</div></div>` +
238+ // state should be inlined before scripts
239+ `<script>window.${ options . stateKey || '__INITIAL_STATE__' } ={"a":1}</script>` +
238240 // manifest chunk should be first
239241 `<script src="/manifest.js"></script>` +
240242 // async chunks should be before main chunk
@@ -248,9 +250,9 @@ describe('SSR: template option', () => {
248250 function createClientManifestAssertions ( runInNewContext ) {
249251 it ( 'bundleRenderer + renderToString + clientManifest ()' , done => {
250252 createRendererWithManifest ( 'split.js' , { runInNewContext } , renderer => {
251- renderer . renderToString ( { } , ( err , res ) => {
253+ renderer . renderToString ( { state : { a : 1 } } , ( err , res ) => {
252254 expect ( err ) . toBeNull ( )
253- expect ( res ) . toContain ( expectedHTMLWithManifest ( false ) )
255+ expect ( res ) . toContain ( expectedHTMLWithManifest ( ) )
254256 done ( )
255257 } )
256258 } )
@@ -265,13 +267,15 @@ describe('SSR: template option', () => {
265267 }
266268 }
267269 } , renderer => {
268- const stream = renderer . renderToStream ( { } )
270+ const stream = renderer . renderToStream ( { state : { a : 1 } } )
269271 let res = ''
270272 stream . on ( 'data' , chunk => {
271273 res += chunk . toString ( )
272274 } )
273275 stream . on ( 'end' , ( ) => {
274- expect ( res ) . toContain ( expectedHTMLWithManifest ( true ) )
276+ expect ( res ) . toContain ( expectedHTMLWithManifest ( {
277+ preloadOtherAssets : true
278+ } ) )
275279 done ( )
276280 } )
277281 } )
@@ -282,14 +286,16 @@ describe('SSR: template option', () => {
282286 runInNewContext,
283287 template : `<html>` +
284288 `<head>{{{ renderResourceHints() }}}{{{ renderStyles() }}}</head>` +
285- `<body><!--vue-ssr-outlet-->{{{ renderScripts() }}}</body>` +
289+ `<body><!--vue-ssr-outlet-->{{{ renderState({ windowKey: '__FOO__', contextKey: 'foo' }) }}}{{{ renderScripts() }}}</body>` +
286290 `</html>` ,
287291 inject : false
288292 } , renderer => {
289- const context = { }
293+ const context = { foo : { a : 1 } }
290294 renderer . renderToString ( context , ( err , res ) => {
291295 expect ( err ) . toBeNull ( )
292- expect ( res ) . toContain ( expectedHTMLWithManifest ( false ) )
296+ expect ( res ) . toContain ( expectedHTMLWithManifest ( {
297+ stateKey : '__FOO__'
298+ } ) )
293299 done ( )
294300 } )
295301 } )
@@ -300,7 +306,7 @@ describe('SSR: template option', () => {
300306 runInNewContext,
301307 template : null
302308 } , renderer => {
303- const context = { }
309+ const context = { foo : { a : 1 } }
304310 renderer . renderToString ( context , ( err , res ) => {
305311 expect ( err ) . toBeNull ( )
306312
@@ -310,10 +316,16 @@ describe('SSR: template option', () => {
310316 context . renderStyles ( )
311317 } </head><body>${
312318 res +
319+ context . renderState ( {
320+ windowKey : '__FOO__' ,
321+ contextKey : 'foo'
322+ } ) +
313323 context . renderScripts ( )
314324 } </body></html>`
315325
316- expect ( customOutput ) . toContain ( expectedHTMLWithManifest ( false ) )
326+ expect ( customOutput ) . toContain ( expectedHTMLWithManifest ( {
327+ stateKey : '__FOO__'
328+ } ) )
317329 done ( )
318330 } )
319331 } )
0 commit comments