mirror of
https://github.com/vuejs/vue-cli.git
synced 2026-03-11 02:29:21 -05:00
* refactor: move router to its own plugin * refactor: rename routerHistoryMode option to historyMode * test: add @vue/cli-plugin-router tests * feat: change src/router.js for most common use cases * fix: fix cli-ui tests * docs: Remove router root option from docs * fix: add support for legacy router option
132 lines
4.6 KiB
JavaScript
132 lines
4.6 KiB
JavaScript
jest.setTimeout(60000)
|
|
|
|
const path = require('path')
|
|
const fs = require('fs-extra')
|
|
const { defaultPreset } = require('@vue/cli/lib/options')
|
|
const create = require('@vue/cli-test-utils/createTestProject')
|
|
const serve = require('@vue/cli-test-utils/serveWithPuppeteer')
|
|
|
|
const sleep = n => new Promise(resolve => setTimeout(resolve, n))
|
|
|
|
test('serve', async () => {
|
|
const project = await create('e2e-serve', defaultPreset)
|
|
|
|
await serve(
|
|
() => project.run('vue-cli-service serve'),
|
|
async ({ nextUpdate, helpers }) => {
|
|
const msg = `Welcome to Your Vue.js App`
|
|
expect(await helpers.getText('h1')).toMatch(msg)
|
|
|
|
// test hot reload
|
|
const file = await project.read(`src/App.vue`)
|
|
project.write(`src/App.vue`, file.replace(msg, `Updated`))
|
|
await nextUpdate() // wait for child stdout update signal
|
|
await sleep(1000) // give the client time to update
|
|
expect(await helpers.getText('h1')).toMatch(`Updated`)
|
|
}
|
|
)
|
|
})
|
|
|
|
test('serve with router', async () => {
|
|
const project = await create('e2e-serve-router', Object.assign({}, defaultPreset, {
|
|
plugins: {
|
|
'@vue/cli-plugin-router': {}
|
|
}
|
|
}))
|
|
|
|
await serve(
|
|
() => project.run('vue-cli-service serve'),
|
|
async ({ page, helpers }) => {
|
|
expect(await helpers.getText('h1')).toMatch(`Welcome to Your Vue.js App`)
|
|
expect(await helpers.hasElement('#nav')).toBe(true)
|
|
expect(await helpers.hasClass('a[href="#/"]', 'router-link-exact-active')).toBe(true)
|
|
expect(await helpers.hasClass('a[href="#/about"]', 'router-link-exact-active')).toBe(false)
|
|
|
|
await page.click('a[href="#/about"]')
|
|
expect(await helpers.getText('h1')).toMatch(`This is an about page`)
|
|
expect(await helpers.hasElement('#nav')).toBe(true)
|
|
expect(await helpers.hasClass('a[href="#/"]', 'router-link-exact-active')).toBe(false)
|
|
expect(await helpers.hasClass('a[href="#/about"]', 'router-link-exact-active')).toBe(true)
|
|
}
|
|
)
|
|
})
|
|
|
|
test('serve with legacy router option', async () => {
|
|
const project = await create('e2e-serve-legacy-router', Object.assign({}, defaultPreset, {
|
|
router: true,
|
|
routerHistoryMode: true
|
|
}))
|
|
|
|
await serve(
|
|
() => project.run('vue-cli-service serve'),
|
|
async ({ page, helpers }) => {
|
|
expect(await helpers.getText('h1')).toMatch(`Welcome to Your Vue.js App`)
|
|
expect(await helpers.hasElement('#nav')).toBe(true)
|
|
expect(await helpers.hasClass('a[href="/"]', 'router-link-exact-active')).toBe(true)
|
|
expect(await helpers.hasClass('a[href="/about"]', 'router-link-exact-active')).toBe(false)
|
|
|
|
await page.click('a[href="/about"]')
|
|
expect(await helpers.getText('h1')).toMatch(`This is an about page`)
|
|
expect(await helpers.hasElement('#nav')).toBe(true)
|
|
expect(await helpers.hasClass('a[href="/"]', 'router-link-exact-active')).toBe(false)
|
|
expect(await helpers.hasClass('a[href="/about"]', 'router-link-exact-active')).toBe(true)
|
|
}
|
|
)
|
|
})
|
|
|
|
test('serve with inline entry', async () => {
|
|
const project = await create('e2e-serve-inline-entry', defaultPreset)
|
|
|
|
await fs.move(
|
|
path.resolve(project.dir, 'src/main.js'),
|
|
path.resolve(project.dir, 'src/index.js')
|
|
)
|
|
|
|
await serve(
|
|
() => project.run('vue-cli-service serve src/index.js'),
|
|
async ({ nextUpdate, helpers }) => {
|
|
const msg = `Welcome to Your Vue.js App`
|
|
expect(await helpers.getText('h1')).toMatch(msg)
|
|
|
|
// test hot reload
|
|
const file = await project.read(`src/App.vue`)
|
|
project.write(`src/App.vue`, file.replace(msg, `Updated`))
|
|
await nextUpdate() // wait for child stdout update signal
|
|
await sleep(1000) // give the client time to update
|
|
expect(await helpers.getText('h1')).toMatch(`Updated`)
|
|
}
|
|
)
|
|
})
|
|
|
|
test('serve with no public dir', async () => {
|
|
const project = await create('e2e-serve-no-public', defaultPreset)
|
|
|
|
await fs.remove(path.resolve(project.dir, 'public'))
|
|
|
|
await serve(
|
|
() => project.run('vue-cli-service serve'),
|
|
async ({ nextUpdate, helpers }) => {
|
|
const msg = `Welcome to Your Vue.js App`
|
|
expect(await helpers.getText('h1')).toMatch(msg)
|
|
|
|
// test hot reload
|
|
const file = await project.read(`src/App.vue`)
|
|
project.write(`src/App.vue`, file.replace(msg, `Updated`))
|
|
await nextUpdate() // wait for child stdout update signal
|
|
await sleep(1000) // give the client time to update
|
|
expect(await helpers.getText('h1')).toMatch(`Updated`)
|
|
}
|
|
)
|
|
})
|
|
|
|
test('dart sass', async () => {
|
|
const project = await create('test-dart-sass', exports.defaultPreset = {
|
|
useConfigFiles: false,
|
|
cssPreprocessor: 'dart-sass',
|
|
plugins: {}
|
|
})
|
|
|
|
// should build successfully
|
|
await project.run('vue-cli-service build')
|
|
})
|