mirror of
https://github.com/vuejs/vue-cli.git
synced 2026-02-14 10:59:51 -06:00
123 lines
3.3 KiB
JavaScript
123 lines
3.3 KiB
JavaScript
jest.setTimeout(35000)
|
|
|
|
const path = require('path')
|
|
const { linkBin } = require('@vue/cli/lib/util/linkBin')
|
|
const create = require('@vue/cli-test-utils/createTestProject')
|
|
|
|
const runSilently = fn => {
|
|
const log = console.log
|
|
console.log = () => {}
|
|
const res = fn()
|
|
console.log = log
|
|
return res
|
|
}
|
|
|
|
test('should work', async () => {
|
|
const project = await create('eslint', {
|
|
plugins: {
|
|
'@vue/cli-plugin-babel': {},
|
|
'@vue/cli-plugin-eslint': {
|
|
config: 'airbnb',
|
|
lintOn: 'commit'
|
|
}
|
|
}
|
|
}, null, true /* initGit */)
|
|
const { read, write, run } = project
|
|
// should've applied airbnb autofix
|
|
const main = await read('src/main.js')
|
|
expect(main).toMatch(';')
|
|
// remove semicolons
|
|
const updatedMain = main.replace(/;/g, '')
|
|
await write('src/main.js', updatedMain)
|
|
// lint
|
|
await run('vue-cli-service lint')
|
|
expect(await read('src/main.js')).toMatch(';')
|
|
|
|
// lint-on-commit
|
|
await runSilently(() => {
|
|
require('yorkie/src/install')(path.join(project.dir, 'node_modules'))
|
|
// since yorkie isn't actually installed in the test project, we need to
|
|
// symlink it
|
|
return linkBin(
|
|
path.resolve(require.resolve('yorkie/src/install'), '../../'),
|
|
path.join(project.dir, 'node_modules', 'yorkie')
|
|
)
|
|
})
|
|
const hook = await read('.git/hooks/pre-commit')
|
|
expect(hook).toMatch('#yorkie')
|
|
await write('src/main.js', updatedMain)
|
|
// nvm doesn't like PREFIX env
|
|
if (process.platform === 'darwin') {
|
|
delete process.env.PREFIX
|
|
}
|
|
await run('git add -A')
|
|
await run('git commit -m save')
|
|
// should be linted on commit
|
|
expect(await read('src/main.js')).toMatch(';')
|
|
|
|
// lint-on-save needs to be tested in a callback
|
|
let done
|
|
const donePromise = new Promise(resolve => {
|
|
done = resolve
|
|
})
|
|
// enable lintOnSave
|
|
await write('vue.config.js', 'module.exports = { lintOnSave: true }')
|
|
// write invalid file
|
|
const app = await read('src/App.vue')
|
|
const updatedApp = app.replace(/;/, '')
|
|
await write('src/App.vue', updatedApp)
|
|
|
|
const server = run('vue-cli-service serve')
|
|
|
|
let isFirstMsg = true
|
|
server.stdout.on('data', data => {
|
|
data = data.toString()
|
|
if (data.match(/Compiled with \d warning/)) {
|
|
// should fail on start
|
|
expect(isFirstMsg).toBe(true)
|
|
isFirstMsg = false
|
|
// fix it
|
|
setTimeout(() => {
|
|
write('src/App.vue', app)
|
|
}, process.env.CI ? 1000 : 200)
|
|
} else if (data.match(/Compiled successfully/)) {
|
|
// should compile on 2nd update
|
|
expect(isFirstMsg).toBe(false)
|
|
server.stdin.write('close')
|
|
done()
|
|
}
|
|
})
|
|
|
|
await donePromise
|
|
})
|
|
|
|
test('should not fix with --no-fix option', async () => {
|
|
const project = await create('eslint-nofix', {
|
|
plugins: {
|
|
'@vue/cli-plugin-babel': {},
|
|
'@vue/cli-plugin-eslint': {
|
|
config: 'airbnb',
|
|
lintOn: 'commit'
|
|
}
|
|
}
|
|
})
|
|
const { read, write, run } = project
|
|
// should've applied airbnb autofix
|
|
const main = await read('src/main.js')
|
|
expect(main).toMatch(';')
|
|
// remove semicolons
|
|
const updatedMain = main.replace(/;/g, '')
|
|
await write('src/main.js', updatedMain)
|
|
|
|
// lint with no fix should fail
|
|
try {
|
|
await run('vue-cli-service lint --no-fix')
|
|
} catch (e) {
|
|
expect(e.code).toBe(1)
|
|
expect(e.failed).toBeTruthy()
|
|
}
|
|
|
|
// files should not have been fixed
|
|
expect(await read('src/main.js')).not.toMatch(';')
|
|
})
|