diff --git a/README.md b/README.md index d2f155f233..c0f9cb0b3e 100644 --- a/README.md +++ b/README.md @@ -21,9 +21,9 @@ ## Links - 📘 Documentation: [https://nuxtjs.org](https://nuxtjs.org) +- 👥 [Community](https://nuxtjs.cmty.io) - 🎬 Video: [1 minute demo](https://www.youtube.com/watch?v=kmf-p-pTi40) - 🐦 Twitter: [@nuxt_js](https://twitter.com/nuxt_js) -- 👥 [Nuxt.js Community](https://github.com/nuxt-community) - 📦 [Nuxt.js Modules](https://github.com/nuxt-community/modules) - 👉 [Play with Nuxt.js online](https://glitch.com/edit/#!/nuxt-hello-world) diff --git a/lib/app/App.js b/lib/app/App.js index 5aba807b6c..e409ce13fa 100644 --- a/lib/app/App.js +++ b/lib/app/App.js @@ -17,7 +17,7 @@ const layouts = { <%= Object.keys(layouts).map(key => `"_${key}": _${hash(key)}` <% if (splitChunks.layouts) { %>let resolvedLayouts = {}<% } %> export default { - head: <%= serialize(head).replace('head(', 'function(').replace('titleTemplate(', 'function(') %>, + head: <%= serialize(head).replace(/:\w+\(/gm, ':function(') %>, render(h, props) { <% if (loading) { %>const loadingEl = h('nuxt-loading', { ref: 'loading' })<% } %> const layoutEl = h(this.layout || 'nuxt') @@ -121,4 +121,3 @@ export default { <%= (loading ? 'NuxtLoading' : '') %> } } - diff --git a/test/e2e/basic.browser.test.js b/test/e2e/basic.browser.test.js index 1adabd7387..c285c9e665 100644 --- a/test/e2e/basic.browser.test.js +++ b/test/e2e/basic.browser.test.js @@ -191,11 +191,12 @@ describe('basic browser', () => { }) // Close server and ask nuxt to stop listening to file changes - test('Closing server and nuxt.js', async () => { + afterAll(async () => { await nuxt.close() }) - test('Stop browser', async () => { + // Stop browser + afterAll(async () => { await page.close() await browser.close() }) diff --git a/test/e2e/children.patch.browser.test.js b/test/e2e/children.patch.browser.test.js index 757096a798..0f52b75655 100644 --- a/test/e2e/children.patch.browser.test.js +++ b/test/e2e/children.patch.browser.test.js @@ -121,11 +121,12 @@ describe('children patch (browser)', () => { }) // Close server and ask nuxt to stop listening to file changes - test('Closing server and nuxt.js', async () => { + afterAll(async () => { await nuxt.close() }) - test('Stop browser', async () => { + // Stop browser + afterAll(async () => { await page.close() await browser.close() }) diff --git a/test/fixtures/deprecate/deprecate.test.js b/test/fixtures/deprecate/deprecate.test.js index c35f098b57..6ca93cdfdb 100644 --- a/test/fixtures/deprecate/deprecate.test.js +++ b/test/fixtures/deprecate/deprecate.test.js @@ -1,3 +1,5 @@ const { buildFixture } = require('../../utils/build') -buildFixture('deprecate') +describe.skip('build deprecate fixture', () => { + buildFixture('deprecate') +}) diff --git a/test/unit/basic.dev.test.js b/test/unit/basic.dev.test.js index 151f1a01b9..c75268fafc 100644 --- a/test/unit/basic.dev.test.js +++ b/test/unit/basic.dev.test.js @@ -48,7 +48,7 @@ describe('basic dev', () => { // }) // Close server and ask nuxt to stop listening to file changes - test('Closing server and nuxt.js', async () => { + afterAll(async () => { await nuxt.close() }) }) diff --git a/test/unit/basic.generate.test.js b/test/unit/basic.generate.test.js index 680ff62f85..fb407c79e3 100644 --- a/test/unit/basic.generate.test.js +++ b/test/unit/basic.generate.test.js @@ -181,7 +181,7 @@ describe('basic generate', () => { }) // Close server and ask nuxt to stop listening to file changes - test('Closing server', async () => { + afterAll(async () => { await server.close() }) }) diff --git a/test/unit/basic.ssr.test.js b/test/unit/basic.ssr.test.js index b6b7078ab7..39479ed4a1 100644 --- a/test/unit/basic.ssr.test.js +++ b/test/unit/basic.ssr.test.js @@ -266,7 +266,7 @@ describe('basic ssr', () => { }) // Close server and ask nuxt to stop listening to file changes - test('Closing server and nuxt.js', async () => { + afterAll(async () => { await nuxt.close() }) }) diff --git a/test/unit/children.test.js b/test/unit/children.test.js index 3b93a36477..e634765713 100644 --- a/test/unit/children.test.js +++ b/test/unit/children.test.js @@ -48,7 +48,7 @@ describe('children', () => { }) // Close server and ask nuxt to stop listening to file changes - test('Closing server and nuxt.js', async () => { + afterAll(async () => { await nuxt.close() }) }) diff --git a/test/unit/custom-dirs.test.js b/test/unit/custom-dirs.test.js index 0f1df8c686..e391547b21 100644 --- a/test/unit/custom-dirs.test.js +++ b/test/unit/custom-dirs.test.js @@ -42,7 +42,7 @@ describe('custom-dirs', () => { }) // Close server and ask nuxt to stop listening to file changes - test('Closing server and nuxt.js', async () => { + afterAll(async () => { await nuxt.close() }) }) diff --git a/test/unit/debug.test.js b/test/unit/debug.test.js index 0791af4f4a..5f79d35fb2 100644 --- a/test/unit/debug.test.js +++ b/test/unit/debug.test.js @@ -89,7 +89,7 @@ describe.skip('debug', () => { }) // Close server and ask nuxt to stop listening to file changes - test('Closing server and nuxt.js', async () => { + afterAll(async () => { await nuxt.close() }) }) diff --git a/test/unit/deprecate.test.js b/test/unit/deprecate.test.js index 2acedae074..bca55b6c15 100644 --- a/test/unit/deprecate.test.js +++ b/test/unit/deprecate.test.js @@ -5,7 +5,7 @@ let port let nuxt = null // let buildSpies = null -describe('deprecate', () => { +describe.skip('deprecate', () => { beforeAll(async () => { const config = loadFixture('deprecate') @@ -14,8 +14,10 @@ describe('deprecate', () => { await nuxt.listen(port, 'localhost') }) + test() + // Close server and ask nuxt to stop listening to file changes - test('Closing server and nuxt.js', async () => { + afterAll(async () => { await nuxt.close() }) }) diff --git a/test/unit/error.test.js b/test/unit/error.test.js index 9d7872a753..56c4291f8e 100644 --- a/test/unit/error.test.js +++ b/test/unit/error.test.js @@ -39,7 +39,7 @@ describe('error', () => { }) // Close server and ask nuxt to stop listening to file changes - test('Closing server and nuxt.js', async () => { + afterAll(async () => { await nuxt.close() }) }) diff --git a/test/unit/express.test.js b/test/unit/express.test.js index 2fae69742c..4810140c2d 100644 --- a/test/unit/express.test.js +++ b/test/unit/express.test.js @@ -32,7 +32,7 @@ describe('express', () => { expect(html.includes('

My component!

')).toBe(true) }) - test('close server', async () => { + afterAll(async () => { await nuxt.close() await new Promise((resolve, reject) => { server.close(err => err ? reject(err) : resolve()) diff --git a/test/unit/fallback.generate.test.js b/test/unit/fallback.generate.test.js index 842f3a060a..ef9a5fcac9 100644 --- a/test/unit/fallback.generate.test.js +++ b/test/unit/fallback.generate.test.js @@ -75,7 +75,7 @@ describe('fallback generate', () => { ) // Close server and ask nuxt to stop listening to file changes - test('Closing server', async () => { + afterAll(async () => { await server.close() }) }) diff --git a/test/unit/module.test.js b/test/unit/module.test.js index d98daa73c6..a331559f53 100644 --- a/test/unit/module.test.js +++ b/test/unit/module.test.js @@ -7,52 +7,54 @@ const url = route => 'http://localhost:' + port + route let nuxt = null // let buildSpies = null -beforeAll(async () => { - const config = loadFixture('module') - nuxt = new Nuxt(config) - port = await getPort() - await nuxt.listen(port, 'localhost') -}) - -test('Plugin', async () => { - expect(normalize(nuxt.options.plugins[0].src).includes( - normalize('fixtures/module/.nuxt/basic.reverse.') - )).toBe(true) - const { html } = await nuxt.renderRoute('/') - expect(html.includes('

TXUN

')).toBe(true) -}) - -test('Layout', async () => { - expect(nuxt.options.layouts.layout.includes('layout')).toBe(true) - - const { html } = await nuxt.renderRoute('/layout') - expect(html.includes('

Module Layouts

')).toBe(true) -}) - -test('Hooks', async () => { - expect(nuxt.__module_hook).toBe(1) - expect(nuxt.__renderer_hook).toBe(2) -}) - -test('Hooks - Functional', async () => { - expect(nuxt.__ready_called__).toBe(true) -}) - -// test('Hooks - Error', async () => { -// expect(buildSpies.error.calledWithMatch(/build:extendRoutes/)).toBe(true) -// }) - -test('Middleware', async () => { - let response = await rp(url('/api')) - expect(response).toBe('It works!') -}) - -test('Hooks - Use external middleware before render', async () => { - let response = await rp(url('/use-middleware')) - expect(response).toBe('Use external middleware') -}) - -// Close server and ask nuxt to stop listening to file changes -test('Closing server and nuxt.js', async () => { - await nuxt.close() +describe.skip('module', () => { + beforeAll(async () => { + const config = loadFixture('module') + nuxt = new Nuxt(config) + port = await getPort() + await nuxt.listen(port, 'localhost') + }) + + test('Plugin', async () => { + expect(normalize(nuxt.options.plugins[0].src).includes( + normalize('fixtures/module/.nuxt/basic.reverse.') + )).toBe(true) + const { html } = await nuxt.renderRoute('/') + expect(html.includes('

TXUN

')).toBe(true) + }) + + test('Layout', async () => { + expect(nuxt.options.layouts.layout.includes('layout')).toBe(true) + + const { html } = await nuxt.renderRoute('/layout') + expect(html.includes('

Module Layouts

')).toBe(true) + }) + + test('Hooks', async () => { + expect(nuxt.__module_hook).toBe(1) + expect(nuxt.__renderer_hook).toBe(2) + }) + + test('Hooks - Functional', async () => { + expect(nuxt.__ready_called__).toBe(true) + }) + + // test('Hooks - Error', async () => { + // expect(buildSpies.error.calledWithMatch(/build:extendRoutes/)).toBe(true) + // }) + + test('Middleware', async () => { + let response = await rp(url('/api')) + expect(response).toBe('It works!') + }) + + test('Hooks - Use external middleware before render', async () => { + let response = await rp(url('/use-middleware')) + expect(response).toBe('Use external middleware') + }) + + // Close server and ask nuxt to stop listening to file changes + afterAll(async () => { + await nuxt.close() + }) }) diff --git a/test/unit/spa.test.js b/test/unit/spa.test.js index fe9fe8689f..54420ec4c6 100644 --- a/test/unit/spa.test.js +++ b/test/unit/spa.test.js @@ -71,7 +71,7 @@ describe.skip('spa', () => { }) // Close server and ask nuxt to stop listening to file changes - test('Closing server and nuxt.js', async () => { + afterAll(async () => { await nuxt.close() }) }) diff --git a/test/unit/ssr.test.js b/test/unit/ssr.test.js index c49b4cbbc5..9907554f67 100644 --- a/test/unit/ssr.test.js +++ b/test/unit/ssr.test.js @@ -102,7 +102,7 @@ describe('ssr', () => { }) // Close server and ask nuxt to stop listening to file changes - test('Closing server and nuxt.js', async () => { + afterAll(async () => { await nuxt.close() }) }) diff --git a/test/unit/utils.test.js b/test/unit/utils.test.js index 20182b338b..4e21dbcb30 100644 --- a/test/unit/utils.test.js +++ b/test/unit/utils.test.js @@ -1,7 +1,42 @@ - import { Utils } from '../utils' +import mockConsole from '../utils/console' describe('utils', () => { + const console = mockConsole(['warn', 'error']) + + test('printWarn', () => { + Utils.printWarn('Testing printWarn', 'utils.test.js') + + expect(console.warn).toHaveBeenCalledTimes(1) + expect(console.warn.mock.calls[0][0]).toContain('WARN') + expect(console.warn.mock.calls[0][0]).toContain('Testing printWarn') + }) + + test('printError', () => { + Utils.printError(new Error('Error object'), 'utils.test.js') + expect(console.error).toHaveBeenCalledTimes(1) + expect(console.error.mock.calls[0][0]).toContain('Error: Error object') + + console.error.mockClear() + + Utils.printError('Error string', 'utils.test.js') + expect(console.error).toHaveBeenCalledTimes(1) + expect(console.error.mock.calls[0][0]).toContain('Error string') + }) + + test('fatalError', () => { + const exitSpy = jest.spyOn(process, 'exit').mockImplementation() + + Utils.fatalError('Testing fatalError') + + expect(console.error).toHaveBeenCalledTimes(1) + expect(console.error.mock.calls[0][0]).toContain('Testing fatalError') + expect(exitSpy).toHaveBeenCalledTimes(1) + expect(exitSpy).toHaveBeenCalledWith(1) + + exitSpy.mockRestore() + }) + test('encodeHtml', () => { const html = '

Hello

' expect(Utils.encodeHtml(html)).toBe('<h1>Hello</h1>') diff --git a/test/unit/with-config.test.js b/test/unit/with-config.test.js index 9082963f0d..db7068dc84 100644 --- a/test/unit/with-config.test.js +++ b/test/unit/with-config.test.js @@ -179,7 +179,7 @@ describe('with-config', () => { }) // Close server and ask nuxt to stop listening to file changes - test('Closing server and nuxt.js', async () => { + afterAll(async () => { await nuxt.close() }) }) diff --git a/test/utils/console.js b/test/utils/console.js new file mode 100644 index 0000000000..fba52722d6 --- /dev/null +++ b/test/utils/console.js @@ -0,0 +1,22 @@ +/* eslint-disable no-console */ +export default function mockConsole(levels = 'all') { + if (levels === 'all') { + levels = ['trace', 'debug', 'log', 'info', 'warn', 'error'] + } + beforeAll(() => { + for (let level of levels) { + console[level] = jest.fn() + } + }) + beforeEach(() => { + for (let level of levels) { + console[level].mockClear() + } + }) + afterAll(() => { + for (let level of levels) { + console[level].mockRestore() + } + }) + return console +}