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?