2018-11-26 22:49:47 +00:00
|
|
|
import consola from 'consola'
|
2018-11-14 19:35:00 +00:00
|
|
|
import { loadFixture, getPort, Nuxt, rp, wChunk } from '../utils'
|
2018-10-31 15:52:35 +00:00
|
|
|
|
|
|
|
let nuxt, port
|
2023-10-16 21:23:38 +00:00
|
|
|
const url = route => 'http://127.0.0.1:' + port + route
|
2018-11-26 12:09:30 +00:00
|
|
|
const modernUA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
|
2019-04-26 11:54:37 +00:00
|
|
|
const modernInfo = mode => `Modern bundles are detected. Modern mode (\`${mode}\`) is enabled now.`
|
2018-10-31 15:52:35 +00:00
|
|
|
|
2018-11-07 23:37:06 +00:00
|
|
|
describe('modern server mode', () => {
|
2018-10-31 15:52:35 +00:00
|
|
|
beforeAll(async () => {
|
2018-11-26 22:49:47 +00:00
|
|
|
const options = await loadFixture('modern')
|
2018-10-31 15:52:35 +00:00
|
|
|
nuxt = new Nuxt(options)
|
2019-03-08 20:43:23 +00:00
|
|
|
await nuxt.ready()
|
|
|
|
|
2018-10-31 15:52:35 +00:00
|
|
|
port = await getPort()
|
2023-10-16 21:23:38 +00:00
|
|
|
await nuxt.server.listen(port, '127.0.0.1')
|
2018-10-31 15:52:35 +00:00
|
|
|
})
|
|
|
|
|
2018-11-26 22:49:47 +00:00
|
|
|
test('should detect server modern mode', async () => {
|
|
|
|
await nuxt.server.renderAndGetWindow(url('/'))
|
|
|
|
expect(consola.info).toHaveBeenCalledWith(modernInfo('server'))
|
|
|
|
})
|
|
|
|
|
2018-10-31 15:52:35 +00:00
|
|
|
test('should use legacy resources by default', async () => {
|
2019-12-02 15:23:56 +00:00
|
|
|
const { body: response } = await rp(url('/'))
|
2018-10-31 15:52:35 +00:00
|
|
|
expect(response).toContain('/_nuxt/app.js')
|
2020-09-09 08:49:31 +00:00
|
|
|
expect(response).toContain('/_nuxt/commons/app.js')
|
2018-10-31 15:52:35 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
test('should use modern resources for modern resources', async () => {
|
2019-12-02 15:23:56 +00:00
|
|
|
const { body: response } = await rp(url('/'), { headers: { 'user-agent': modernUA } })
|
2020-06-30 17:47:42 +00:00
|
|
|
expect(response).toContain('/_nuxt/app.modern.js')
|
2020-09-09 08:49:31 +00:00
|
|
|
expect(response).toContain('/_nuxt/commons/app.modern.js')
|
2018-10-31 15:52:35 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
test('should include es6 syntax in modern resources', async () => {
|
2020-06-30 17:47:42 +00:00
|
|
|
const { body: response } = await rp(url(`/_nuxt/pages/index.modern.js`))
|
|
|
|
expect(response).toContain('=>')
|
2018-10-31 15:52:35 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
test('should not include es6 syntax in normal resources', async () => {
|
2020-06-30 17:47:42 +00:00
|
|
|
const { body: response } = await rp(url(`/_nuxt/pages/index.js`))
|
|
|
|
expect(response).not.toContain('=>')
|
2018-10-31 15:52:35 +00:00
|
|
|
})
|
2018-11-07 23:37:06 +00:00
|
|
|
|
2018-11-26 12:09:30 +00:00
|
|
|
test('should contain legacy http2 pushed resources', async () => {
|
2019-12-02 15:23:56 +00:00
|
|
|
const { headers: { link } } = await rp(url('/'))
|
2018-11-26 12:09:30 +00:00
|
|
|
expect(link).toEqual([
|
2018-12-05 16:21:58 +00:00
|
|
|
'</_nuxt/runtime.js>; rel=preload; crossorigin=use-credentials; as=script',
|
2020-09-09 08:49:31 +00:00
|
|
|
'</_nuxt/commons/app.js>; rel=preload; crossorigin=use-credentials; as=script',
|
2018-12-05 16:21:58 +00:00
|
|
|
'</_nuxt/app.js>; rel=preload; crossorigin=use-credentials; as=script',
|
|
|
|
`</_nuxt/${wChunk('pages/index.js')}>; rel=preload; crossorigin=use-credentials; as=script`
|
2018-11-26 12:09:30 +00:00
|
|
|
].join(', '))
|
|
|
|
})
|
|
|
|
|
|
|
|
test('should contain module http2 pushed resources', async () => {
|
|
|
|
const { headers: { link } } = await rp(url('/'), {
|
2019-12-02 15:23:56 +00:00
|
|
|
headers: { 'user-agent': modernUA }
|
2018-11-26 12:09:30 +00:00
|
|
|
})
|
|
|
|
expect(link).toEqual([
|
2020-06-30 17:47:42 +00:00
|
|
|
'</_nuxt/runtime.modern.js>; rel=preload; crossorigin=use-credentials; as=script',
|
2020-09-09 08:49:31 +00:00
|
|
|
'</_nuxt/commons/app.modern.js>; rel=preload; crossorigin=use-credentials; as=script',
|
2020-06-30 17:47:42 +00:00
|
|
|
'</_nuxt/app.modern.js>; rel=preload; crossorigin=use-credentials; as=script',
|
|
|
|
`</_nuxt/pages/index.modern.js>; rel=preload; crossorigin=use-credentials; as=script`
|
2018-11-26 12:09:30 +00:00
|
|
|
].join(', '))
|
|
|
|
})
|
|
|
|
|
2019-05-25 19:54:00 +00:00
|
|
|
test('Vary header should contain User-Agent', async () => {
|
|
|
|
const { headers: { vary } } = await rp(url('/'), {
|
|
|
|
headers: { 'user-agent': modernUA }
|
|
|
|
})
|
|
|
|
expect(vary).toContain('User-Agent')
|
|
|
|
})
|
|
|
|
|
2018-11-07 23:37:06 +00:00
|
|
|
// Close server and ask nuxt to stop listening to file changes
|
|
|
|
afterAll(async () => {
|
|
|
|
await nuxt.close()
|
|
|
|
})
|
2018-10-31 15:52:35 +00:00
|
|
|
})
|