Angular2 - 在不同环境中执行e2e测试

时间:2017-09-01 10:11:44

标签: angular protractor angular2-testing angular2-cli

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

但是我需要在测试用例中更改角度应用程序URL,以确定需要进行测试的环境(因为URL因环境而异)。

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

1)是否可以传递参数ng e2e,以便基于参数,可以在测试用例中动态设置URL?

2)是否有必要全局安装protractor,因为Angular CLI在protractor下创建了node_modules的角度应用程序?

在我的项目设置中,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没有必要的细节。

3 个答案:

答案 0 :(得分:4)

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

我的建议是尝试使用环境变量并在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目录中本地安装的版本。这将为其他开发人员提供可重复的步骤,使用相同的Protractor依赖关系来运行e2e测试。或者,如果您使用的是全局安装的版本,则现在必须指示其他开发人员使用特定的Protractor版本。

答案 1 :(得分:1)

我相信您可以创建一个包含测试环境所需的baseUrl的environment.test.ts,然后您可以从命令行运行测试,如下所示:

ng e2e --environment test

答案 2 :(得分:0)

     "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