import { resolve } from 'path' import fs from 'fs' import { promisify } from 'util' import test from 'ava' import { Nuxt, Builder } from '..' import { interceptLog } from './helpers/console' const readFile = promisify(fs.readFile) test.serial('Init Nuxt.js', async t => { const config = { rootDir: resolve(__dirname, 'fixtures/dynamic-routes'), dev: false, build: { stats: false } } const logSpy = await interceptLog(async () => { const nuxt = new Nuxt(config) await new Builder(nuxt).build() }) t.true(logSpy.calledWithMatch('DONE')) }) test('Check .nuxt/router.js', t => { return readFile( resolve(__dirname, './fixtures/dynamic-routes/.nuxt/router.js'), 'utf-8' ).then(routerFile => { routerFile = routerFile .slice(routerFile.indexOf('routes: [')) .replace('routes: [', '[') .replace(/ _[0-9A-z]+,/g, ' "",') routerFile = routerFile.substr( routerFile.indexOf('['), routerFile.lastIndexOf(']') + 1 ) let routes = eval('( ' + routerFile + ')') // eslint-disable-line no-eval // pages/test/index.vue t.is(routes[0].path, '/test') t.is(routes[0].name, 'test') // pages/posts.vue t.is(routes[1].path, '/posts') t.is(routes[1].name, 'posts') t.is(routes[1].children.length, 1) // pages/posts/_id.vue t.is(routes[1].children[0].path, ':id?') t.is(routes[1].children[0].name, 'posts-id') // pages/parent.vue t.is(routes[2].path, '/parent') t.falsy(routes[2].name) // parent route has no name // pages/parent/*.vue t.is(routes[2].children.length, 3) // parent has 3 children t.deepEqual(routes[2].children.map(r => r.path), ['', 'teub', 'child']) t.deepEqual(routes[2].children.map(r => r.name), [ 'parent', 'parent-teub', 'parent-child' ]) // pages/test/projects/index.vue t.is(routes[3].path, '/test/projects') t.is(routes[3].name, 'test-projects') // pages/test/users.vue t.is(routes[4].path, '/test/users') t.falsy(routes[4].name) // parent route has no name // pages/test/users/*.vue t.is(routes[4].children.length, 5) // parent has 5 children t.deepEqual(routes[4].children.map(r => r.path), [ '', 'projects', 'projects/:category', ':id', ':index/teub' ]) t.deepEqual(routes[4].children.map(r => r.name), [ 'test-users', 'test-users-projects', 'test-users-projects-category', 'test-users-id', 'test-users-index-teub' ]) // pages/test/songs/toto.vue t.is(routes[5].path, '/test/songs/toto') t.is(routes[5].name, 'test-songs-toto') // pages/test/projects/_category.vue t.is(routes[6].path, '/test/projects/:category') t.is(routes[6].name, 'test-projects-category') // pages/test/songs/_id.vue t.is(routes[7].path, '/test/songs/:id?') t.is(routes[7].name, 'test-songs-id') // pages/users/_id.vue t.is(routes[8].path, '/users/:id?') t.is(routes[8].name, 'users-id') // pages/test/_.vue t.is(routes[9].path, '/test/*') t.is(routes[9].name, 'test-all') // pages/index.vue t.is(routes[10].path, '/') t.is(routes[10].name, 'index') // pages/_slug.vue t.is(routes[11].path, '/:slug') t.is(routes[11].name, 'slug') // pages/_key/_id.vue t.is(routes[12].path, '/:key/:id?') t.is(routes[12].name, 'key-id') // pages/_.vue t.is(routes[13].path, '/*/p/*') t.is(routes[13].name, 'all-p-all') // pages/_/_.vue t.is(routes[14].path, '/*/*') t.is(routes[14].name, 'all-all') // pages/_.vue t.is(routes[15].path, '/*') t.is(routes[15].name, 'all') }) })