Флаг среды для тестов E2E Cucumber Protractor?

У меня есть приложение Angular v5 и environment.json файлы для моей среды (например, DEV, Test, Production и т. Д.). Файлы окружения хранятся в каталоге следующим образом: src/Environments/DEV/environment.json.

Вот пример файла dev environment.json:

{
  "Comment": "Environment=DEV",
  "API_ORIGIN": "https://myapp-dev",
  "ORIGIN": "https://myapp-dev/index.html",
}

В папке src есть корневой environment.json файл, из которого мое приложение читает. Когда я хочу использовать определенную среду, я просто копирую содержимое этой среды в корень и запускаю приложение.

Теперь, с помощью Cucumber и Protractor, есть ли способ передать аргумент командной строки, чтобы указать, какой environment.json файл использовать в зависимости от моих настроек? У меня есть URL-адреса в этих environment.json файлах, поэтому мне нужен способ сообщить Cucumber и Protractor, какую среду использовать. Если мне нужно скопировать все environment.json файлы в папку e2e, это меня устраивает. На всякий случай, решение, которое мне нужно использовать, зависит от инструментов, которые я использую, вот мой tsconfig.e2e.json файл. Пожалуйста, дайте мне знать, если это неверно:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/e2e",
    "baseUrl": "./",
    "module": "commonjs",
    "target": "es5",
    "types": [
      "chai",
      "cucumber",
      "node"
    ]
  }
}

Вот файл protractor.conf.js. Дайте мне знать, если это неверно, пожалуйста:

// Protractor configuration file, see link for more information
// https://github.com/angular/protractor/blob/master/lib/config.ts

exports.config = {
  allScriptsTimeout: 11000,
  specs: [
    './e2e/features/**/*.feature'
  ],
  capabilities: {
    'browserName': 'chrome'
  },
  directConnect: true,
  baseUrl: 'http://localhost:4200/',
  framework: 'custom',
  frameworkPath: require.resolve('protractor-cucumber-framework'),
  cucumberOpts: {
    // require step definition files before executing features
    require: ['./e2e/steps/**/*.ts'],
    // <string[]> (expression) only execute the features or scenarios with tags matching the expression
    tags: [],
    // <string[]> ("extension:module") require files with the given EXTENSION after requiring MODULE (repeatable)
    compiler: []
  },

  // Enable TypeScript for the tests
  onPrepare() {
    require('ts-node').register({
      project: 'e2e/tsconfig.e2e.json'
    });
  }
};

Я также использую npm, если это важно. Я запускаю эти тесты с помощью команды ng e2e, предоставленной angular.


person Bmoe    schedule 17.05.2021    source источник


Ответы (1)


конечно, 2 способа:

  1. передать параметр транспортиру protractor conf.js --params.env="dev", а затем указать его как browser.params.env в спецификациях. Обратной стороной является то, что он будет доступен только после анализа конфигурации и запуска браузера, поэтому вы действительно можете использовать это в самой конфигурации.

  2. Запустите процесс с переменной env MY_VAR=Dev protractor config.js, и он будет доступен где угодно, запустив process.env.MY_VAR

Для справки

https://stackoverflow.com/a/58547994/9150146

https://stackoverflow.com/a/66111592/9150146


P.S.

как вы это реализуете, зависит от вас, но этот подход является наиболее гибким

conf.js

let environment = require('src/Environments/' + process.env.TEST_ENV + '/environment.json');

module.exports = {
  baseUrl: environment.API_ORIGIN
}

и запустите транспортир вот так

TEST_ENV=DEV protractor config.js
person Sergey Pleshakov    schedule 18.05.2021
comment
Привет. Я вижу, вы дали мне команду транспортиром. Будет ли это работать для комбинации огурца и транспортира? - person Bmoe; 18.05.2021
comment
Также я новичок в этой настройке. Итак, я понял, что мои файлы конфигурации неправильно настроены для огурца и транспортира, и обновил их. - person Bmoe; 18.05.2021
comment
не имеет значения. 1-й способ - это чисто транспортир, независимо от структуры. 2-й - это логика, специфичная для узла, и она даже не связана с транспортиром, не говоря уже об огурце. - person Sergey Pleshakov; 18.05.2021
comment
В порядке. Теперь у меня в приложении есть один environment.json файл для каждой среды. Как я могу использовать эту переменную env для чтения правильного файла environment.json? Путь к файлам такой: src/Environments/DEV/environment.json, src/Environments/TEST/environment.json и т. Д. Все они имеют одинаковые ключи. Единственная разница в ценностях. У меня есть пример содержимого файла в вопросе. - person Bmoe; 18.05.2021
comment
зависит от того, где вы его используете. Конфиг или спес? - person Sergey Pleshakov; 18.05.2021
comment
Я еще не понял этого на стороне тестирования e2e, но в моем приложении мы просто делаем запрос api к корневому environment.json файлу, когда приложение загружается. При развертывании мы обновляем этот файл, добавляя в него правильную среду. Мы сопоставили файл json с моделью данных и просто сохраняем содержимое в общей службе, используемой во всем приложении. Если есть лучший способ сделать это в отношении тестов e2e, я все слышу. - person Bmoe; 18.05.2021
comment
обновлен примером @Bmoe - person Sergey Pleshakov; 18.05.2021
comment
У меня нет conf.js файла. Мне нужно вместо этого вставить protractor.conf.js? - person Bmoe; 18.05.2021
comment
конечно, как бы вы это ни называли, если это часть вашей исполняемой конфигурации - person Sergey Pleshakov; 18.05.2021
comment
Извините, но как запустить транспортир из командной строки? Используется Windows 10. Запуск TEST_ENV=DEV node_modules/protractor/bin/protractor protractor.conf.js. Я получаю 'TEST_ENV' is not recognized as an internal or external command, operable program or batch file. . Я могу запустить транспортир с помощью команды ng e2e, но функция require не работает, потому что файл json не может быть найден. - person Bmoe; 20.05.2021
comment
да, для окон все по-другому ... посмотрите этот ответ stackoverflow.com/questions/9249830/ - person Sergey Pleshakov; 20.05.2021
comment
Привет. Извините так долго, чтобы ответить вам. Но возникает ошибка при попытке потребовать файл json: `E / configParser - Ошибка: не удается найти модуль 'src/Environments/TEST/environment.json'. Файл определенно есть. - person Bmoe; 11.06.2021
comment
это другая проблема. Я решил то, о чем просили - person Sergey Pleshakov; 11.06.2021
comment
Однако опубликованный вами код не работает. Я получаю сообщение об ошибке, опубликованное в моем комментарии. - person Bmoe; 11.06.2021