【问题标题】:Angular2 - Executing e2e tests in different environmentsAngular2 - 在不同的环境中执行 e2e 测试
【发布时间】:2017-09-01 10:11:43
【问题描述】:

我是Protractor 的新手。我开发了几个测试用例来完成端到端测试。这些测试用例在我们拥有的所有 3 种不同环境中都能正常工作:devtestingproduction

但我需要在测试用例中根据需要进行测试的环境更改 Angular 应用程序 URL(因为 URL 因环境而异)。

我正在使用 Angular CLI 命令ng e2e 运行测试。现在我的问题是

1) 是否可以传递参数ng e2e,这样就可以根据参数在测试用例中动态设置URL?

2) 是否需要全局安装protractor,因为Angular CLI 在node_modules 下创建带有protractor 的angular 应用程序?

在我的项目设置中,Protractor 版本是 5.1.2,Angular CLI 版本是 1.2.0。

下面是Protract的配置

exports.config = {
  allScriptsTimeout: 11000,
  specs: [
     './e2e/**/*.e2e-spec.ts'
  ],
  capabilities: {
    'browserName': 'chrome'
  },
  directConnect: true,
  baseUrl: 'http://localhost:4200/',
  framework: 'jasmine',
  jasmineNodeOpts: {
    showColors: true,
    defaultTimeoutInterval: 30000,
    print: function() {}
  },
  useAllAngular2AppRoots: true,
  beforeLaunch: function() {
    require('ts-node').register({
        project: 'e2e'
    });
  },
  onPrepare: function() {
    jasmine.getEnv().addReporter(new SpecReporter());
  }
};

我尝试了一些方法,例如添加 params:[env:dev] 并在命令行中将参数作为 ng e2e params.env=test 传递,但我总是得到默认值,而不是从命令行传递的值。

我也尝试了@cnishina 的答案,但process.env 的console.log 没有所需的详细信息。

【问题讨论】:

    标签: angular protractor angular2-testing angular2-cli


    【解决方案1】:

    使用环境变量在环境之间切换

    我的建议是尝试使用环境变量,并在 Protractor 配置文件中切换环境。你可以export TEST_ENV=dev 然后为browser.baseUrl 设置条件

    量角器配置文件

    var baseUrl = '';
    if (process.env.TEST_ENV === 'dev') {
      baseUrl = 'http://devurl';
    } else if (process.env.TEST_ENV === 'stage') {
      baseUrl = 'http://stageurl';
    } else {
      baseUrl = 'http://produrl';
    }
    
    exports.config = {
      baseUrl: baseUrl
    }
    

    有关使用process.env 的配置文件的更好的具体示例,请参阅Testing Angular Applications, chapter 11 GitHub repo

    你也可以内联更改 baseUrl 参数;但是,如果您要根据测试环境更改多个变量,我建议使用环境变量:

    ng e2e {protractor config file} --baseUrl='http://devurl'

    量角器全局安装?

    量角器不需要全局安装。建议使用从 node_modules 目录本地安装的版本。这将为其他开发人员提供可重复的步骤,使用相同的量角器依赖项来运行 e2e 测试。或者,如果您使用的是全局安装版本,您现在必须指导其他开发人员使用特定的 Protractor 版本。

    【讨论】:

    • 有点困惑,当你说export TEST_ENV=dev。哪个文件会有这个导出语句??
    • 以及如何将不同的环境值(dev、stage)设置为TEST_ENV
    • 我尝试了命令ng e2e TEST_ENV=devng e2e protractor.conf.js TEST_ENV=testing。这些是正确的命令吗?当我 console.log process.env 时,我没有看到密钥 TEST_ENV。我正在使用量角器版本 5.1.2 和角度 CLI 版本 1.2.0。请帮忙...
    • 在 bash 中:export TEST_ENV=dev,然后你可以运行ng e2e protractor.conf.js。或者,您可以用标志覆盖 Protractor 配置文件中的字段,例如 baseUrl。所以这就是为什么替代选项是运行ng e2e protractor.conf.js --baseUrl='http://devurl'。没有办法设置ng e2e protractor.conf.js TEST_ENV=testing
    • @cnishina 您提供的链接已失效。
    【解决方案2】:

    我相信您可以创建一个 environment.test.ts 包含您想要用于测试环境的 baseUrl,然后您可以像这样从命令行运行测试:

    ng e2e --environment test
    

    【讨论】:

    • Afaik 仅适用于应用程序本身,但不适用于 e2e 规范。
    【解决方案3】:
         "architect": {
            "e2e": {
              "builder": "@angular-devkit/build-angular:protractor",
              "options": {
                "protractorConfig": "e2e/protractor.conf.js"
              },
              "configurations": {
                "production": {
                  "devServerTarget": "project:serve:production"
                },
                "mac": {
                  "devServerTarget": "project:serve:mac"
                }
              }
            }
    

    然后您可以使用--configuration 标志在环境之间切换:

    ng e2e --configuration=production
    ng e2e --configuration=mac
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      • 2017-05-27
      • 2019-02-17
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多