mirror of
https://github.com/vuejs/vue-cli.git
synced 2026-05-03 10:32:10 -05:00
231 lines
5.7 KiB
JavaScript
231 lines
5.7 KiB
JavaScript
jest.setTimeout(35000)
|
|
|
|
const generateWithPlugin = require('@vue/cli-test-utils/generateWithPlugin')
|
|
const create = require('@vue/cli-test-utils/createTestProject')
|
|
|
|
test('base', async () => {
|
|
const { pkg } = await generateWithPlugin({
|
|
id: 'eslint',
|
|
apply: require('../generator'),
|
|
options: {}
|
|
})
|
|
|
|
expect(pkg.scripts.lint).toBeTruthy()
|
|
expect(pkg.eslintConfig.extends).toEqual([
|
|
'plugin:vue/essential', 'eslint:recommended'
|
|
])
|
|
})
|
|
|
|
test('airbnb', async () => {
|
|
const { pkg } = await generateWithPlugin({
|
|
id: 'eslint',
|
|
apply: require('../generator'),
|
|
options: {
|
|
config: 'airbnb'
|
|
}
|
|
})
|
|
|
|
expect(pkg.scripts.lint).toBeTruthy()
|
|
expect(pkg.eslintConfig.extends).toEqual([
|
|
'plugin:vue/essential',
|
|
'@vue/airbnb'
|
|
])
|
|
expect(pkg.devDependencies).toHaveProperty('@vue/eslint-config-airbnb')
|
|
})
|
|
|
|
test('standard', async () => {
|
|
const { pkg } = await generateWithPlugin({
|
|
id: 'eslint',
|
|
apply: require('../generator'),
|
|
options: {
|
|
config: 'standard'
|
|
}
|
|
})
|
|
|
|
expect(pkg.scripts.lint).toBeTruthy()
|
|
expect(pkg.eslintConfig.extends).toEqual([
|
|
'plugin:vue/essential',
|
|
'@vue/standard'
|
|
])
|
|
expect(pkg.devDependencies).toHaveProperty('@vue/eslint-config-standard')
|
|
})
|
|
|
|
test('prettier', async () => {
|
|
const { pkg } = await generateWithPlugin({
|
|
id: 'eslint',
|
|
apply: require('../generator'),
|
|
options: {
|
|
config: 'prettier'
|
|
}
|
|
})
|
|
|
|
expect(pkg.scripts.lint).toBeTruthy()
|
|
expect(pkg.eslintConfig.extends).toEqual([
|
|
'plugin:vue/essential',
|
|
'eslint:recommended',
|
|
'@vue/prettier'
|
|
])
|
|
expect(pkg.devDependencies).toHaveProperty('@vue/eslint-config-prettier')
|
|
})
|
|
|
|
test('babel', async () => {
|
|
const { pkg } = await generateWithPlugin([
|
|
{
|
|
id: 'eslint',
|
|
apply: require('../generator'),
|
|
options: {}
|
|
},
|
|
{
|
|
id: 'babel',
|
|
apply: require('@vue/cli-plugin-babel/generator'),
|
|
options: {}
|
|
}
|
|
])
|
|
|
|
expect(pkg.scripts.lint).toBeTruthy()
|
|
expect(pkg.devDependencies).toHaveProperty('babel-eslint')
|
|
expect(pkg.eslintConfig.parserOptions).toEqual({
|
|
parser: 'babel-eslint'
|
|
})
|
|
})
|
|
|
|
test('typescript', async () => {
|
|
const { pkg } = await generateWithPlugin([
|
|
{
|
|
id: 'eslint',
|
|
apply: require('../generator'),
|
|
options: {
|
|
config: 'prettier'
|
|
}
|
|
},
|
|
{
|
|
id: 'typescript',
|
|
apply: require('@vue/cli-plugin-typescript/generator'),
|
|
options: {}
|
|
}
|
|
])
|
|
|
|
expect(pkg.scripts.lint).toBeTruthy()
|
|
expect(pkg.eslintConfig.extends).toEqual([
|
|
'plugin:vue/essential',
|
|
'eslint:recommended',
|
|
'@vue/typescript/recommended',
|
|
'@vue/prettier',
|
|
'@vue/prettier/@typescript-eslint'
|
|
])
|
|
expect(pkg.devDependencies).toHaveProperty('@vue/eslint-config-prettier')
|
|
expect(pkg.devDependencies).toHaveProperty('@vue/eslint-config-typescript')
|
|
})
|
|
|
|
test('lint on save', async () => {
|
|
const { pkg } = await generateWithPlugin({
|
|
id: 'eslint',
|
|
apply: require('../generator'),
|
|
options: {
|
|
lintOn: 'save'
|
|
}
|
|
})
|
|
// lintOnSave defaults to true so no need for the vue config
|
|
expect(pkg.vue).toBeFalsy()
|
|
})
|
|
|
|
test('lint on commit', async () => {
|
|
const { pkg } = await generateWithPlugin({
|
|
id: 'eslint',
|
|
apply: require('../generator'),
|
|
options: {
|
|
lintOn: 'commit'
|
|
}
|
|
})
|
|
expect(pkg.gitHooks['pre-commit']).toBe('lint-staged')
|
|
expect(pkg.devDependencies).toHaveProperty('lint-staged')
|
|
expect(pkg['lint-staged']).toEqual({
|
|
'*.{js,jsx,vue}': ['vue-cli-service lint', 'git add']
|
|
})
|
|
expect(pkg.vue).toEqual({
|
|
lintOnSave: false
|
|
})
|
|
})
|
|
|
|
test('should lint ts files when typescript plugin co-exists', async () => {
|
|
const { read } = await create('eslint-lint-ts-files', {
|
|
plugins: {
|
|
'@vue/cli-plugin-eslint': {
|
|
lintOn: 'commit'
|
|
},
|
|
'@vue/cli-plugin-typescript': {}
|
|
}
|
|
}, null, true)
|
|
const pkg = JSON.parse(await read('package.json'))
|
|
expect(pkg).toMatchObject({
|
|
'lint-staged': {
|
|
'*.{js,jsx,vue,ts,tsx}': ['vue-cli-service lint', 'git add']
|
|
}
|
|
})
|
|
})
|
|
|
|
test('generate .editorconfig for new projects', async () => {
|
|
const { files } = await generateWithPlugin({
|
|
id: 'eslint',
|
|
apply: require('../generator'),
|
|
options: {
|
|
config: 'airbnb'
|
|
}
|
|
})
|
|
expect(files['.editorconfig']).toBeTruthy()
|
|
})
|
|
|
|
test('append to existing .editorconfig', async () => {
|
|
const { dir, read, write } = await create('eslint-editorconfig', {
|
|
plugins: {
|
|
'@vue/cli-plugin-eslint': {}
|
|
}
|
|
}, null, true)
|
|
await write('.editorconfig', 'root = true\n')
|
|
|
|
const invoke = require('@vue/cli/lib/invoke')
|
|
await invoke(`eslint`, { config: 'airbnb' }, dir)
|
|
|
|
const editorconfig = await read('.editorconfig')
|
|
expect(editorconfig).toMatch('root = true')
|
|
expect(editorconfig).toMatch('[*.{js,jsx,ts,tsx,vue}]')
|
|
})
|
|
|
|
test('airbnb config + typescript + unit-mocha', async () => {
|
|
await create('eslint-airbnb-typescript', {
|
|
plugins: {
|
|
'@vue/cli-plugin-eslint': {
|
|
config: 'airbnb',
|
|
lintOn: 'commit'
|
|
},
|
|
'@vue/cli-plugin-typescript': {
|
|
classComponent: true
|
|
},
|
|
'@vue/cli-plugin-unit-mocha': {}
|
|
}
|
|
})
|
|
}, 30000)
|
|
|
|
test('typescript + e2e-nightwatch', async () => {
|
|
const { run } = await create('eslint-typescript-nightwatch', {
|
|
plugins: {
|
|
'@vue/cli-plugin-eslint': {},
|
|
'@vue/cli-plugin-typescript': {
|
|
classComponent: true
|
|
},
|
|
'@vue/cli-plugin-e2e-nightwatch': {}
|
|
}
|
|
})
|
|
await run('vue-cli-service lint')
|
|
}, 30000)
|
|
|
|
test('should be able to parse dynamic import syntax', async () => {
|
|
const { run } = await create('eslint-dynamic-import', {
|
|
plugins: {
|
|
'@vue/cli-plugin-eslint': {},
|
|
'@vue/cli-plugin-router': {}
|
|
}
|
|
})
|
|
await run('vue-cli-service lint')
|
|
}, 30000)
|