mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-23 14:15:13 +00:00
123 lines
3.6 KiB
JavaScript
123 lines
3.6 KiB
JavaScript
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')
|
|
})
|
|
})
|