Я сделал что-то похожее на пример Бена, за исключением того, что вместо расширения я использовал Object.assign()
для создания своих конфигов.
Создайте конфигурацию по умолчанию, в которой есть все, что будет разделено между конфигурациями.Тогда в каждый из других конфигов включайте только то, что будет отличаться между конфигурациями.Любые повторяющиеся поля будут перезаписаны вторым аргументом в Object.assign()
Например, когда я запускаю тесты в локальной среде разработчика, моя локальная конфигурация выглядит так:
// local.conf.js
module.exports = {
baseUrl: 'http://localhost:8082',
directConnect: true
}
Наша среда полностью контейнерная, поэтому, когда я хочу запустить дымовые тесты на сборках, вот как выглядит конфигурация:
// build.conf.js
module.exports = {
baseUrl: 'https://app:7443',
seleniumAddress: 'http://hub:4444/wd/hub',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {}
}
}
Моя конфигурация по умолчанию (общая) не включает directConnect
или seleniumAddress
так как они не могут быть вместе в одном конфиге.Эти значения поступают из других файлов конфигурации.Используя приведенные выше примеры в качестве ссылки, ваша базовая конфигурация будет выглядеть примерно так:
const defaultConf = require('/path/to/dafault.conf');
const localConf = require('/path/to/local.conf');
const remoteDevChrome = require('/path/to/remote_dev_chrome.conf');
const remoteQsaChrome = require('/path/to/remote_qsa_chrome.conf');
const configuration = process.argv.filter(arg => {
return arg.includes('--configuration');
})[0];
let protractorConf = {};
switch (configuration.split('=')[1]) {
case 'local_chrome':
protractorConf = Object.assign(defaultConf, localConf);
case 'remote_dev_chrome':
protractorConf = Object.assign(defaultConf, remoteDevChrome);
case 'remote_gsa_chrome':
// ... and so on ...
default:
// whatever default config you use
}
exports.config = protractorConf;
При этом вам больше не нужно иметь несколько скриптов в package.json
.Вы можете просто использовать один скрипт, и конфигурация будет основана на том, что вы передали для --configuration