【问题标题】:How to run Protractor e2e tests using different Angular environment variables如何使用不同的 Angular 环境变量运行 Protractor e2e 测试
【发布时间】:2018-01-01 23:54:36
【问题描述】:

我使用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

...但是在运行 e2e Protractor 测试时,它似乎是 impossible to set a specific environment。以下命令只是忽略了环境(根据this comment,这似乎是预期的)。始终使用默认环境:

ng e2e --environment=test    // same as `ng e2e`

还有其他方法可以使用特定环境运行测试吗?

【问题讨论】:

  • 您找到解决方案了吗?如果是,请分享..
  • 不,很遗憾没有。我最终修改了我在 CI 上使用的默认环境,但这不是我正在寻找的解决方案。
  • 我所做的是在e2e 文件夹下创建了config 文件,该文件接受baseUrl 作为参数。如果我需要在生产环境中进行测试,我将通过此参数,否则将考虑本地环境。但需要通过全局量角器而不是通过 ng e2e 运行测试。再次不是好的解决方案,对我来说它的工作。

标签: angular protractor environment-variables e2e-testing


【解决方案1】:

通过将其添加到 .angular-cli.json 中,我能够成功使用不同的环境

  "environments": {
    "dev": "environments/environment.ts",
    "test": "environments/environment.test.ts",
    "prod": "environments/environment.prod.ts"
  }

然后调用

ng e2e --environment test

【讨论】:

  • 您提到的环境配置已经存在于应用部分,但我无法访问规范或量角器配置文件中的环境变量。那么你能告诉你是如何访问环境变量的吗??
【解决方案2】:

Angular 6 删除了对 --environment 选项的支持。对于buildserve,您只需切换到ng build --configuration testng 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 配置。

就我而言,我想始终使用我的dev 配置运行我的e2e 测试,所以我只是将此行更改为"devServerTarget": "jglite:serve:dev",然后我可以通过调用ng e2e 来运行我需要的环境。

【讨论】:

  • 感谢您的解决方案,您让我的问题很开心。 ???
【解决方案3】:

使用新的 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"
        }
      ]
    }

然后在我的 project-e2e 中,我使用我为 devServerTarget 定制的“serve-e2e”选项:

      "options": {
        "protractorConfig": "./protractor.conf.js",
        "devServerTarget": "q-desktop-v2:serve-e2e"
      }

如果应用程序在测试环境中运行,这使得添加或忽略特定代码变得容易:

    if (!environment.test) {
     // do something
    }

【讨论】:

  • 感谢您撰写本文。对于那些试图弄清楚的人,我只是写了一个更明确的版本,强调这一切在 angular.json 文件中是如何工作的 medium.com/building-the-stack/…
【解决方案4】:

您可以根据环境变量参数化您的配置

量角器是一个节点进程。任何节点进程都可以使用自定义节点变量启动。不确定它是如何在 Windows 中完成的(如果您知道,请发表评论),但对于 mac 和任何 linux/unix 操作系统,您都可以

使用这样的环境变量启动量角器

MY_VAR=Dev protractor tmp/config.js

然后它将在您的流程中的任何位置甚至在您的配置中都可用

if (process.env.MY_VAR.toLowerCase() === 'dev') {
  envFile = require(./dev.json)
}

【讨论】:

    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2021-11-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多