mirror of
https://github.com/vuejs/vue-cli.git
synced 2026-01-20 14:19:59 -06:00
82 lines
2.8 KiB
JavaScript
82 lines
2.8 KiB
JavaScript
module.exports = (api, options) => {
|
|
api.registerCommand('test:e2e', {
|
|
description: 'run e2e tests with nightwatch',
|
|
usage: 'vue-cli-service test:e2e [options]',
|
|
options: {
|
|
'--url': 'run e2e tests against given url instead of auto-starting dev server',
|
|
'--config': 'use custom nightwatch config file (overrides internals)',
|
|
'-e, --env': 'specify comma-delimited browser envs to run in (default: chrome)',
|
|
'-t, --test': 'sepcify a test to run by name',
|
|
'-f, --filter': 'glob to filter tests by filename'
|
|
},
|
|
details:
|
|
`All Nightwatch CLI options are also supported.\n` +
|
|
`https://github.com/nightwatchjs/nightwatch/blob/master/lib/runner/cli/cli.js`
|
|
}, (args, rawArgs) => {
|
|
removeArg(rawArgs, 'url')
|
|
removeArg(rawArgs, 'mode')
|
|
|
|
const serverPromise = args.url
|
|
? Promise.resolve({ url: args.url })
|
|
: api.service.run('serve')
|
|
|
|
return serverPromise.then(({ server, url }) => {
|
|
// expose dev server url to tests
|
|
process.env.VUE_DEV_SERVER_URL = url
|
|
if (rawArgs.indexOf('--config') === -1) {
|
|
// expose user options to config file
|
|
const fs = require('fs')
|
|
let userOptionsPath, userOptions
|
|
if (fs.existsSync(userOptionsPath = api.resolve('nightwatch.config.js'))) {
|
|
userOptions = require(userOptionsPath)
|
|
} else if (fs.existsSync(userOptionsPath = api.resolve('nightwatch.json'))) {
|
|
userOptions = require(userOptionsPath)
|
|
}
|
|
process.env.VUE_NIGHTWATCH_USER_OPTIONS = JSON.stringify(userOptions || {})
|
|
|
|
rawArgs.push('--config', require.resolve('./nightwatch.config.js'))
|
|
}
|
|
|
|
if (rawArgs.indexOf('--env') === -1) {
|
|
rawArgs.push('--env', 'chrome')
|
|
}
|
|
|
|
const execa = require('execa')
|
|
const nightWatchBinPath = require.resolve('nightwatch/bin/nightwatch')
|
|
const runner = execa(nightWatchBinPath, rawArgs, { stdio: 'inherit' })
|
|
if (server) {
|
|
runner.on('exit', () => server.close())
|
|
runner.on('error', () => server.close())
|
|
}
|
|
|
|
if (process.env.VUE_CLI_TEST) {
|
|
runner.on('exit', code => {
|
|
process.exit(code)
|
|
})
|
|
}
|
|
|
|
return runner
|
|
})
|
|
})
|
|
|
|
// TODO remove in RC
|
|
api.registerCommand('e2e', (args, rawArgv) => {
|
|
const { warn } = require('@vue/cli-shared-utils')
|
|
warn(`Deprecation Warning: "vue-cli-service e2e" has been renamed to "vue-cli-service test:e2e".`)
|
|
return api.service.run('test:e2e', args, rawArgv)
|
|
})
|
|
}
|
|
|
|
module.exports.defaultModes = {
|
|
'test:e2e': 'production'
|
|
}
|
|
|
|
function removeArg (rawArgs, arg, offset = 1) {
|
|
const matchRE = new RegExp(`^--${arg}`)
|
|
const equalRE = new RegExp(`^--${arg}=`)
|
|
const i = rawArgs.findIndex(arg => matchRE.test(arg))
|
|
if (i > -1) {
|
|
rawArgs.splice(i, offset + (equalRE.test(rawArgs[i]) ? 0 : 1))
|
|
}
|
|
}
|