我目前正在将我的应用程序从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 中的配置如下:
...
"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
的命令行来进行管理。
任何建议将不胜感激! :)
答案 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的答案。