web-dev-qa-db-fra.com

Comment exécuter les tests Protractor e2e en utilisant différentes variables d'environnement Angular

J'utilise Angular angulaires pour configurer les points de terminaison de l'API :

.\src\environments:
    environment.ts
    environment.test.ts
    environment.prod.ts

Les fichiers d'environnement contiennent des paramètres tels que les suivants, qui sont différents pour les serveurs de développement et CI locaux:

export const environment = {
  ...
  apiUrl: "https://api.sample.com"
};

Cela fonctionne bien lorsque j'ai besoin de créer ou de démarrer l'application. Je peux simplement spécifier le paramètre d'environnement :

ng serve --environment=test

... mais il est apparu que c'est impossible de définir un environnement spécifique lors de l'exécution des tests e2e Protractor . La commande suivante ignore simplement l'environnement (qui semble être attendu selon ce commentaire ). L'environnement par défaut est toujours utilisé:

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

Existe-t-il d'autres moyens d'exécuter les tests à l'aide d'un environnement spécifique?

20
Serhii Shushliapin

Avec le nouveau Angular 6 angular.json fichier de configuration: j'ai pu utiliser mon fichier environment.test.ts sur mes tests e2e. J'ai dû créer un nouvel architecte sur mon projet, je l'ai appelé serve-e2e.

    "serve-e2e": {
      "builder": "@angular-devkit/build-angular:dev-server",
      "options": {
        "browserTarget": "q-desktop-v2:build:test"
      }
    }

Ma configuration: test config utilise les configurations "fileReplacements":

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

Ensuite, dans mon projet-e2e, j'utilise mon option "serve-e2e" personnalisée pour le devServerTarget:

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

Cela facilite l'ajout ou l'ignorance de code spécifique si l'application s'exécute sur un environnement de test:

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

J'ai pu utiliser avec succès un environnement différent en l'ajoutant au .angular-cli.json

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

puis appeler

ng e2e --environment test
5
Jozzhart

Angular 6 a supprimé le support de --environment option. Pour build ou serve, vous pouvez simplement passer à ng build --configuration test ou ng serve --configuration test. Cependant, au moins dans mon projet, la mise à niveau Angular a en fait créé une toute autre configuration de projet nommée <myproject>-e2e dans mon fichier angular.json.

À l'intérieur, cela pourrait ressembler à ceci.

"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/**"
        ]
      }
    }
  }
}

Le "devServerTarget": "jglite:serve" la ligne pointe la configuration vers ma configuration par défaut serve.

Dans mon cas, je veux toujours exécuter mes tests e2e avec ma configuration dev, donc je viens de changer cette ligne en "devServerTarget": "jglite:serve:dev", puis j'ai pu exécuter l'environnement dont j'avais besoin en appelant simplement ng e2e.

3
speckledcarp