selenium-standalone
Version:
installs a `selenium-standalone` command line to install and start a standalone selenium server
174 lines (147 loc) • 5.58 kB
JavaScript
var path = require('path');
var chai = require('chai');
var expect = chai.expect;
var parseCommandAndOptions;
var processNodeEnv;
/**
* Builds a valid ARGV array with passed arguments.
*/
function buildArgv(args) {
var argv = ['/somewhere/node', '/somewhere/selenium-standalone'];
if (args) {
argv = argv.concat(args);
}
return argv;
}
/**
* Tests for `selenium-standalone` command parameters parsing.
*/
describe('`selenium-standalone` command parameters', function() {
// Allow tests to mock `process.platform`
before(function() {
this.originalArgv = Object.getOwnPropertyDescriptor(process, 'argv');
});
after(function() {
Object.defineProperty(process, 'argv', this.originalArgv);
});
// Ensure that any internal state of the module is clean for each test
beforeEach(function() {
if (process.env) {
processNodeEnv = process.env.NODE_ENV;
process.env.NODE_ENV = 'test-cli-parameters';
} else {
process.env = { NODE_ENV: 'test-cli-parameters' };
}
parseCommandAndOptions = require('../bin/selenium-standalone').bind(null, '/path/to/java');
});
afterEach(function() {
delete require.cache[require.resolve('../bin/selenium-standalone')];
if (processNodeEnv) {
process.env.NODE_ENV = processNodeEnv;
} else {
delete process.env.NODE_ENV;
}
});
describe('action', function() {
it('is required', function() {
process.argv = buildArgv();
expect(parseCommandAndOptions)
.to.throw(/^No action provided$/);
});
it('only accepts valid values', function() {
process.argv = buildArgv(['test']);
expect(parseCommandAndOptions).to.throw(/^Invalid action /);
process.argv = buildArgv(['install']);
expect(parseCommandAndOptions).to.not.throw();
process.argv = buildArgv(['start']);
expect(parseCommandAndOptions).to.not.throw();
});
});
describe('arguments', function() {
it('are correctly parsed', function() {
process.argv = buildArgv([
'install',
'--test=1',
'-a', 'ok',
'-h'
]);
var parsed = parseCommandAndOptions();
expect(parsed[1].test).to.be.equal(1);
expect(parsed[1].a).to.be.equal('ok');
expect(parsed[1].h).to.be.true;
});
it('are correctly passed unparsed to selenium when after --', function() {
process.argv = buildArgv([
'install',
'--test=1',
'--',
'--test=1',
'-a', 'ok',
'-h',
]);
var parsed = parseCommandAndOptions();
expect(parsed[1].test).to.be.equal(1);
expect(parsed[1].a).to.be.undefined;
expect(parsed[1].seleniumArgs).to.deep.equal(['--test=1', '-a', 'ok', '-h']);
});
it('takes default values when not specified', function() {
process.argv = buildArgv(['install']);
var parsed1 = parseCommandAndOptions('/somewhere');
var defaultValues = require('../lib/default-config');
Object.keys(defaultValues).forEach(function(key) {
expect(parsed1[1][key]).to.deep.equal(defaultValues[key]);
});
process.argv = buildArgv(['install', '--drivers.chrome.version=42']);
var parsed2 = parseCommandAndOptions('/somewhere');
expect(parsed2[1].drivers.chrome.version).to.be.equal('42');
expect(parsed2[1].drivers.chrome.baseURL)
.to.be.equal(defaultValues.drivers.chrome.baseURL);
});
it('are correctly parsed from a JSON config file', function() {
process.argv = buildArgv([
'install',
'--config=' + path.join(__dirname, 'fixtures', 'config.valid.json'),
]);
var parsed = parseCommandAndOptions('/somewhere');
expect(parsed[1].version).to.be.equal('42');
expect(parsed[1].drivers.ie.version).to.be.equal(42);
expect(parsed[1].drivers.ie.baseURL).to.be.equal('http://www.google.fr');
});
it('are correctly parsed from a JS module config file', function() {
process.argv = buildArgv([
'install',
'--config=' + path.join(__dirname, 'fixtures', 'config.valid.js'),
]);
var parsed = parseCommandAndOptions('/somewhere');
expect(parsed[1].version).to.be.equal('42');
expect(parsed[1].drivers.ie.version).to.be.equal(42);
expect(parsed[1].drivers.ie.baseURL).to.be.equal('http://www.google.fr');
});
it('throws if config file is invalid', function() {
process.argv = buildArgv([
'install',
'--config=' + path.join(__dirname, 'fixtures', 'config.invalid.json'),
]);
expect(parseCommandAndOptions).to.throw(/^Error parsing config file :/);
});
it('throws if config file is not an object', function() {
process.argv = buildArgv([
'install',
'--config=' + path.join(__dirname, 'fixtures', 'config.invalid.js'),
]);
expect(parseCommandAndOptions).to.throw(/^Error parsing config file : Config file does not exports an object$/);
});
it('respects the precedence order : command line > config file > default', function() {
var defaultValues = require('../lib/default-config');
process.argv = buildArgv([
'install',
'--config=' + path.join(__dirname, 'fixtures', 'config.valid.js'),
'--drivers.ie.version=43',
]);
var parsed = parseCommandAndOptions('/somewhere');
expect(parsed[1].version).to.be.equal('42');
expect(parsed[1].drivers.ie.arch).to.be.equal(defaultValues.drivers.ie.arch);
expect(parsed[1].drivers.ie.version).to.be.equal('43');
});
});
});