如何 运行 Protractor e2e 测试使用不同的 Angular 环境变量
How to run Protractor e2e tests using different Angular environment variables
我使用 Angular 环境变量来 configure API endpoints:
.\src\environments:
environment.ts
environment.test.ts
environment.prod.ts
环境文件包含如下设置,这些设置对于本地开发和 CI 服务器是不同的:
export const environment = {
...
apiUrl: "https://api.sample.com"
};
当我需要构建或启动应用程序时,它工作正常。我可以简单地指定 environment 参数:
ng serve --environment=test
...但它似乎是 impossible to set a specific environment when running e2e Protractor tests. The following command simply ignores the environment (which seems to be expected according to this comment)。始终使用默认环境:
ng e2e --environment=test // same as `ng e2e`
有没有其他方法可以运行使用特定环境进行测试?
通过将它添加到 .angular-cli.json
,我能够成功使用不同的环境
"environments": {
"dev": "environments/environment.ts",
"test": "environments/environment.test.ts",
"prod": "environments/environment.prod.ts"
}
然后调用
ng e2e --environment test
Angular 6 删除了对 --environment
选项的支持。对于 build
或 serve
,您可以切换到 ng build --configuration test
或 ng serve --configuration test
。但是,至少在我的项目中,Angular 升级实际上在我的 angular.json 文件中创建了另一个名为 <myproject>-e2e
的项目配置。
在内部,它可能看起来像这样。
"myproject-e2e": {
"root": "",
"sourceRoot": "",
"projectType": "application",
"architect": {
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "./protractor.conf.js",
"devServerTarget": "jglite:serve"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"e2e/tsconfig.e2e.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
}
"devServerTarget": "jglite:serve"
行将配置指向我的默认 serve
配置。
在我的例子中,我希望总是 运行 我的 e2e 测试与我的 dev
配置,所以我只是将这一行更改为 "devServerTarget": "jglite:serve:dev"
,然后我可以 运行 我需要的环境只需调用 ng e2e
.
使用新的 Angular 6 angular.json
配置文件:
我能够在 e2e 测试中使用我的文件 environment.test.ts
。
我不得不为我的项目创建一个新的架构师,我称之为 serve-e2e
。
"serve-e2e": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "q-desktop-v2:build:test"
}
}
我的 build:test 配置使用 "fileReplacements" 配置:
"test": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.test.ts"
}
]
}
然后在我的项目-e2e 中,我为 devServerTarget 使用自定义的 "serve-e2e" 选项:
"options": {
"protractorConfig": "./protractor.conf.js",
"devServerTarget": "q-desktop-v2:serve-e2e"
}
如果应用程序 运行 在测试环境中,这使得添加或忽略特定代码变得容易:
if (!environment.test) {
// do something
}
您可以根据环境变量参数化您的配置
量角器是一个节点进程。任何节点进程都可以使用自定义节点变量启动。不确定在 windows 中是如何完成的(如果您知道,请发表评论)但是对于 mac 和任何 linux/unix OS 您可以
像这样使用环境变量启动量角器
MY_VAR=Dev protractor tmp/config.js
然后它将在您的流程中的任何地方可用,甚至在您的配置中
if (process.env.MY_VAR.toLowerCase() === 'dev') {
envFile = require(./dev.json)
}
我使用 Angular 环境变量来 configure API endpoints:
.\src\environments:
environment.ts
environment.test.ts
environment.prod.ts
环境文件包含如下设置,这些设置对于本地开发和 CI 服务器是不同的:
export const environment = {
...
apiUrl: "https://api.sample.com"
};
当我需要构建或启动应用程序时,它工作正常。我可以简单地指定 environment 参数:
ng serve --environment=test
...但它似乎是 impossible to set a specific environment when running e2e Protractor tests. The following command simply ignores the environment (which seems to be expected according to this comment)。始终使用默认环境:
ng e2e --environment=test // same as `ng e2e`
有没有其他方法可以运行使用特定环境进行测试?
通过将它添加到 .angular-cli.json
,我能够成功使用不同的环境 "environments": {
"dev": "environments/environment.ts",
"test": "environments/environment.test.ts",
"prod": "environments/environment.prod.ts"
}
然后调用
ng e2e --environment test
Angular 6 删除了对 --environment
选项的支持。对于 build
或 serve
,您可以切换到 ng build --configuration test
或 ng serve --configuration test
。但是,至少在我的项目中,Angular 升级实际上在我的 angular.json 文件中创建了另一个名为 <myproject>-e2e
的项目配置。
在内部,它可能看起来像这样。
"myproject-e2e": {
"root": "",
"sourceRoot": "",
"projectType": "application",
"architect": {
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "./protractor.conf.js",
"devServerTarget": "jglite:serve"
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"e2e/tsconfig.e2e.json"
],
"exclude": [
"**/node_modules/**"
]
}
}
}
}
"devServerTarget": "jglite:serve"
行将配置指向我的默认 serve
配置。
在我的例子中,我希望总是 运行 我的 e2e 测试与我的 dev
配置,所以我只是将这一行更改为 "devServerTarget": "jglite:serve:dev"
,然后我可以 运行 我需要的环境只需调用 ng e2e
.
使用新的 Angular 6 angular.json
配置文件:
我能够在 e2e 测试中使用我的文件 environment.test.ts
。
我不得不为我的项目创建一个新的架构师,我称之为 serve-e2e
。
"serve-e2e": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "q-desktop-v2:build:test"
}
}
我的 build:test 配置使用 "fileReplacements" 配置:
"test": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.test.ts"
}
]
}
然后在我的项目-e2e 中,我为 devServerTarget 使用自定义的 "serve-e2e" 选项:
"options": {
"protractorConfig": "./protractor.conf.js",
"devServerTarget": "q-desktop-v2:serve-e2e"
}
如果应用程序 运行 在测试环境中,这使得添加或忽略特定代码变得容易:
if (!environment.test) {
// do something
}
您可以根据环境变量参数化您的配置
量角器是一个节点进程。任何节点进程都可以使用自定义节点变量启动。不确定在 windows 中是如何完成的(如果您知道,请发表评论)但是对于 mac 和任何 linux/unix OS 您可以
像这样使用环境变量启动量角器
MY_VAR=Dev protractor tmp/config.js
然后它将在您的流程中的任何地方可用,甚至在您的配置中
if (process.env.MY_VAR.toLowerCase() === 'dev') {
envFile = require(./dev.json)
}