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?
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
}
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
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
.