В настоящее время я переносил свое приложение с 4 на 6, и я не могу выполнить свой прокси-скрипт для моих тестов e2e .

Список сценариев выглядит следующим образом:

"scripts": {
    "ng": "ng",
    "start": "ng serve",
    "start:tst1": "ng serve --proxy-config config/proxy/proxy.tst1.json",
    "start:tst5": "ng serve --proxy-config config/proxy/proxy.tst5.json",
    ...
    "test:watch": "ng test",
    "lint": "ng lint --type-check true",
    "e2e": "ng e2e",
    "e2e:tst1": "ng e2e --proxy-config config/proxy/proxy.tst1.json",
    "e2e:tst5": "ng e2e --proxy-config config/proxy/proxy.tst5.json",
  },

Что я не понимаю, так это то, что команды запуска (ng serve) отлично работают, например, npm run start:tst5. Но когда я пытаюсь выполнить e2e-тесты, такие как npm run e2e:tst5, выдает ошибку: Unknown option: '--proxyConfig'.

Конфигурация в моем angular.json выглядит следующим образом:

Angular.json

...
"lmsbo-bo-e2e": {
  "root": "e2e",
  "sourceRoot": "e2e",
  "projectType": "application",
  "architect": {
    "e2e": {
      "builder": "@angular-devkit/build-angular:protractor",
      "options": {
        "protractorConfig": "e2e/protractor.conf.js",
        "devServerTarget": "lmsbo-bo:serve"
      },
        "configurations": {
            "production": {
                "devServerTarget": "lmsbo-bo:serve:production"
            }
        }
    },
  ...

Редактировать

Я получил тест e2e, работающий со следующим дополнением в angular.cli:

        "serve": {
            "builder": "@angular-devkit/build-angular:dev-server",
            "options": {
                "browserTarget": "lmsbo-bo:build",
                "proxyConfig": "config/proxy/proxy.tst5.json" <== **added this** line
            },
            "configurations": {
                "production": {
                    "browserTarget": "lmsbo-bo:build:production"
                }
            }
        },

Но этот подход решения никоим образом не удовлетворяет. Я должен изменить эту строку кода каждый раз, когда я хочу выполнить в другой среде. Я бы предпочел управлять этим через командную строку, написав что-то вроде: ng serve --proxy-config config/proxy/proxy.tst5.json.

10
MarcoLe 20 Авг 2018 в 13:34

3 ответа

Лучший ответ

Хотя эта функция больше не поддерживается и на github уже есть открытая проблема, я нашел довольно удобный способ выполнить настройку прокси через script:

Добавьте в ваш package.json следующие строки (пример):

"e2e:local": "ng config projects.**yourAppName**.architect.serve.options.proxyConfig **yourProxyFile1** && ng e2e && ng config projects.**yourAppName**.architect.serve.options.proxyConfig ''",
"e2e:tst1": "ng config config projects.**yourAppName**.architect.serve.options.proxyConfig **yourProxyFile2** && ng e2e && ng config projects.**yourAppName**.architect.serve.options.proxyConfig ''"

Все, что вам нужно сделать, это установить значение proxyConfig в вашем angular.json с помощью команды ng и сбросить его после завершения испытаний e2e. Убедитесь, что команда ng работает (если нет, добавьте ваш путь angular/cli в свойства вашей среды операционной системы и перезагрузите компьютер).

5
MarcoLe 28 Окт 2018 в 08:38

Если я правильно понимаю - вы хотите избежать необходимости изменять строку конфигурации прокси-сервера каждый раз, когда вы хотите запускать тесты e2e для разных сред:

Создайте отдельные конфигурации прокси для ваших сред, таких как:

  • proxy.config.yourenv1.json
  • proxy.config.yourenv2.json

Добавьте конфигурации для каждой среды в serve:

"serve": { ... "configurations": { "yourenv1-e2e": { "browserTarget": "yourapp:build", "proxyConfig": "proxy.config.yourenv1.json" }, "yourenv2-e2e": { "browserTarget": "yourapp:build", "proxyConfig": "proxy.config.yourenv2.json" } } },

Затем под yourapp-e2e снова добавьте конфигурации для каждой среды:

"yourapp-e2e": {
  ...
  "architect": {
    "e2e": {
      ...
      "configurations": {
        "yourenv1-e2e": {
          "devServerTarget": "yourapp:serve:yourenv1-e2e"
        },
        "yourenv2-e2e": {
          "devServerTarget": "yourapp:serve:yourenv2-e2e"
        },
      }
    },

Теперь вы можете просто запустить это:

ng e2e --configuration yourenv-e2e

Тесты e2e будут выполняться с использованием желаемого файла конфигурации прокси.
На основании ответа @ raymondboswel.

2
Dawid Stróżak 12 Ноя 2018 в 23:50

Вы можете сделать это, обновив файл angular.json следующим образом (замените имя своего проекта на my-project):

1) В проектах -> my-project-e2e обновите devServerTarget из

"my-project:serve" 

К

"my-project:serve:e2e"

2) В проектах -> мой проект -> архитектор -> конфигурации, добавить

"e2e": {
          "browserTarget": "cli-advisor-portal:build:e2e",
          "proxyConfig": "proxy.local.config.json"
        }
4
raymondboswel 30 Авг 2018 в 11:44
51928880