角度迁移(从4迁移到6)e2e --proxy-config不起作用

时间:2018-08-20 10:34:17

标签: angular protractor angular6 e2e-testing angular-e2e

我目前正在将我的应用程序从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服务)对于实例npm run start:tst5来说可以很好地工作。但是,当我尝试执行npm run e2e:tst5之类的e2e测试时,会抛出错误: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"
            }
        }
    },
  ...

编辑

我在angular.cli中进行了以下添加的e2e测试:

        "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的命令行来进行管理。

任何建议将不胜感激! :)

3 个答案:

答案 0 :(得分:4)

尽管不再支持此功能,并且github上已经存在一个开放问题,但Ive发现了一种非常方便的方法来通过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路径添加到操作系统的环境属性中,然后重新启动计算机)。

答案 1 :(得分:2)

您可以按照以下方式更新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"
        }

答案 2 :(得分:2)

如果我的理解正确-您想避免每次要针对不同的环境运行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的答案。