J'utilise une application Angular 2+ avec des tests d'intégration à l'aide de Cypress.io et CI à l'aide de circleCI.
J'ai supprimé un didacticiel fourni ici pour configurer un Projet angulaire avec circleCI, mais il fallait également ajouter les orbes de cyprès pour exécuter Cypress. Je me suis donc retrouvé avec le script config.yml suivant:
...
- cypress/run:
requires:
- cypress/install
- build
start: 'npm start'
wait-on: 'http://localhost:4200'
context: fireBaseApiKey
Lorsque circleCI démarre, les deux premières tâches du workflow sont réussies (build et cypress / install), mais cypress / run produit l'erreur suivante:
Cypress n'a pas pu vérifier que le serveur défini comme "baseUrl" est en cours d'exécution:
Vos tests font probablement des requêtes à cette 'baseUrl' et ces tests échoue si vous ne démarrez pas votre serveur.
Veuillez démarrer ce serveur, puis relancer Cypress.
Je suppose que je n'ai pas démarré le serveur avec la commande npm run build .
J'ai essayé d'ajouter:
- run:
name: start ng server
command: ng serve
dans la tâche "build", mais l'erreur était alors:
/ bin / bash: ng: commande introuvable
J'ai essayé de trouver un conteneur docker sur dockerhub qui exécuterait des commandes ng et "angular / ngcontainer" me semblait être un bon candidat car utiliser circleci / node: 6.10-browser comme image de docker par le lien du tutoriel également Je n'ai pas reconnu les commandes ng.
Je suppose que je suis en grande partie hors de ma profondeur ici et que je n'ai pas été en mesure de trouver un exemple de projet Angular qui utilise Cypress et exécute CI sur circleCI. Avoir un tel exemple aiderait probablement beaucoup à donner un sens aux choses. D'ici là, est-ce que quelqu'un a des recommandations sur la façon dont je pourrais exécuter une commande comme ng serve et pensez-vous que cela résoudrait l'erreur de non démarrage de mon serveur?
Mise à jour du 3 février, 2019 19:34:
J'ai ajouté wait-on après avoir examiné l'utilisation de l'orbe de cyprès un peu plus par les conseils d'un ami sur Internet. Ainsi, ma commande mise à jour -cypress / run lit:
version: 2.1
orbs:
cypress: cypress-io/cypress@1.0.1
jobs:
build:
working_directory: ~/project
docker:
- image: angular/ngcontainer
steps:
- checkout
- run:
name: Show current branch
command: |
echo ${CIRCLE_BRANCH}
echo $fireBaseApiKey
- restore_cache:
keys:
- v1-dependencies-{{checksum "package.json"}}
- v1-dependencies-
- run:
name: Install local dependencies
command: |
npm install
- save_cache:
key: v1-dependencies-{{checksum "package.json"}}
paths:
- node_modules
- run:
name: Building
command: npm run build
- save_cache:
key: v1-dist-{{ .Environment.CIRCLE_BRANCH}}-{{ .Environment.CIRCLE_SHA1}}
paths:
- dist
workflows:
version: 2.1
build:
jobs:
- build
- cypress/install:
requires:
- build
build: 'npm run build'
context: fireBaseApiKey
- cypress/run:
requires:
- cypress/install
- build
start: 'npm start'
context: fireBaseApiKey
Cela semble attendre un ' http: // localhost: 4200 'qui ne se produit jamais.
3 Réponses :
Je pense que je peux vous aider avec le problème ng command not found .
Vous devez installer angular cli dans vos dépendances de développement:
npm install --save-dev @angular/cli@latest
Ensuite, après l'exécution de npm install , votre script ng existera afin que vous puissiez ajouter votre étape ng serve pour démarrer votre serveur. p>
Malheureusement, il est déjà dans mon package.json, mais une très bonne suggestion!
Bien que je ne pense pas que cela s'applique à vous, cette question est apparue pour moi lorsque j'ai recherché mon problème sur Google. Donc, au cas où une autre personne aurait un problème similaire, voici comment je l'ai fait fonctionner.
Pour que certains packages NPM fonctionnent dans notre environnement, je devais utiliser notre proxy d'entreprise et le définir via les variables d'environnement HTTP_PROXY et HTTPS_PROXY dans mon pipeline Jenkins. Après un peu de débogage, j'ai remarqué que Cypress essayait de faire quelque chose avec le proxy. Une fois que j'ai défini NO_PROXY = localhost cyprès connecté, succès!
Il y avait en fait quelques problèmes ici:
wait-on: 'http-get: // localhost: 4200' Donc, le fichier de configuration final a fini par ressembler à:
export var masterFirebaseConfig = {
apiKey: "circleCiApiKey",
authDomain: "dataJitsu.firebaseapp.com",
databaseURL: "https://datajitsu.firebaseio.com",
storageBucket: "",
messagingSenderId: "495992924984"
};
export var masterStripeConfig = {
publicApiTestKey: "pk_test_NKyjLSwnMosdX0mIgQaRRHbS",
secretApiTestKey: "sk_test_6YWZDNhzfMq3UWZwdvcaOwSa",
publicApiKey: "",
secretApiKey: ""
};
Avec le fichier api-key.ts référencé dans le sed code> instruction ressemblant à:
version: 2.1
orbs:
cypress: cypress-io/cypress@1.5.1
jobs:
build:
working_directory: ~/project
docker:
- image: circleci/node:9.6.1-browsers
environment:
circleCiApiKey: fireBaseApiKey
steps:
- checkout
- run:
name: Show current branch
command: |
echo ${CIRCLE_BRANCH}
ls -larth
echo $fireBaseApiKey
cat src/app/api-keys.ts
sed -i "s/circleCiApiKey/$fireBaseApiKey/g" src/app/api-keys.ts
cat src/app/api-keys.ts
- restore_cache:
keys:
- v1-dependencies-{{checksum "package.json"}}
- v1-dependencies-
- run:
name: Install local dependencies
command: |
npm install
- save_cache:
key: v1-dependencies-{{checksum "package.json"}}
paths:
- node_modules
- run:
name: Building
command: npm run build
- save_cache:
key: v1-dist-{{ .Environment.CIRCLE_BRANCH}}-{{ .Environment.CIRCLE_SHA1}}
paths:
- dist
workflows:
version: 2.1
build:
jobs:
- build
- cypress/install:
requires:
- build
build: 'npm run build'
- cypress/run:
requires:
- cypress/install
- build
start: 'npm start'
store_artifacts: true
wait-on: 'http-get://localhost:4200'
avez-vous déjà compris cela? J'ai le même problème mais sur mon pipeline Jenkins
Pas encore. Travailler avec l'un des développeurs de cyprès sur Twitter. Publiera probablement un problème sur github à ce sujet ce week-end.
Ok cool, pourriez-vous s'il vous plaît me taguer whereisjefe et je peux vous aider à fournir des informations de débogage supplémentaires
@ Atticus29 Pourriez-vous relier le problème ici afin que d'autres personnes qui trébuchent sur ce problème puissent suivre?