如何使用不同的Angular环境变量运行Protractor e2e测试

时间:2017-07-26 14:59:39

标签: angular protractor environment-variables e2e-testing

我将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 impossible to set a specific environment测试时似乎是Protractor。以下命令只是忽略了环境(根据this comment似乎是预期的)。始终使用默认环境:

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

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

4 个答案:

答案 0 :(得分:10)

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

我的构建:测试配置使用" fileReplacements"配置:

    "test": {
      "fileReplacements": [
        {
          "replace": "src/environments/environment.ts",
          "with": "src/environments/environment.test.ts"
        }
      ]
    }

然后在我的项目-e2e中,我使用我自定义的" serve-e2e" devServerTarget的选项:

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

如果应用程序在测试环境中运行,这样可以轻松添加或忽略特定代码:

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

答案 1 :(得分:5)

通过将其添加到.angular-cli.json

,我能够成功使用不同的环境
  "environments": {
    "dev": "environments/environment.ts",
    "test": "environments/environment.test.ts",
    "prod": "environments/environment.prod.ts"
  }

然后调用

ng e2e --environment test

答案 2 :(得分:3)

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",然后我可以通过调用{来运行我需要的环境{1}}。

答案 3 :(得分:1)

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

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

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

MY_VAR=Dev protractor tmp/config.js

然后它将可以在您的流程中的任何地方使用,甚至可以在您的配置中使用

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