Ошибка CircleCI: ваши тесты, вероятно, отправляют запросы этому baseUrl, и эти тесты не пройдут, если вы не загрузите свой сервер - PullRequest
0 голосов
/ 03 февраля 2019

Я запускаю приложение Angular 2+ с интеграционным тестированием с использованием Cypress.io и CI с использованием circleCI.

Я скопировал учебник, предоставленный здесь для настройки проекта Angular сcircleCI, но для запуска Cypress нужно было добавить шары кипариса.Поэтому я получил следующий скрипт config.yml:

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

Когда запускается circleCI, первые два задания рабочего процесса выполняются успешно (сборка и кипарис / установка), но кипарис / запуск приводит к следующемуошибка:

Cypress не может проверить, что сервер, установленный как ваш 'baseUrl', работает:

http://localhost:4200

Ваши тестыСкорее всего, отправлять запросы этому baseUrl, и эти тесты не пройдут, если вы не загрузите свой сервер.

Пожалуйста, запустите этот сервер, а затем снова запустите Cypress.

I'mпредполагая, что я не загружал сервер с помощью команды npm run build.

Я попытался добавить:

- run:
          name: start ng server
          command: ng serve

в задании "build", но затем произошла ошибка:

/ bin / bash: ng: команда не найдена

Я пытался найти докер-контейнер на dockerhub, который выполнял бы команды ng, и «angular / ngcontainer» показался хорошим кандидатомпотому что с помощью circleci / node: 6.10-браузеры в качестве моего образа докера по учебной ссылкеЯ также не распознал команды ng.

Я полагаю, что я в основном только что вышел из своей глубины и не смог найти пример проекта Angular, который использует Cypress и запускает CI на circleCI.Наличие такого примера, вероятно, будет иметь большое значение, помогая вещам иметь смысл.До тех пор, есть ли у кого-нибудь рекомендации о том, как я мог бы выполнить такую ​​команду, как ng serve, и считаете ли вы, что это устранит ошибку загрузки моего сервера?

Обновление 3 февраля, 2019 г. 19: 34:

Я добавил wait-on после изучения использования шара кипариса чуть больше за совет от друга в интернете.Таким образом, моя обновленная команда -cypress/run выглядит следующим образом:

...
- cypress/run:
          requires:
            - cypress/install
            - build
          start: 'npm start'
          wait-on: 'http://localhost:4200'
          context: fireBaseApiKey

Кажется, что это ожидание 'http://localhost:4200', которое никогда не происходит.

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Хотя я не думаю, что это относится к вам, этот вопрос всплыл у меня, когда я гуглил свою проблему.Таким образом, в случае, если у другого человека есть подобная проблема, вот как я это получил.

Чтобы заставить некоторые пакеты NPM работать в нашей среде, мне нужно было использовать наш корпоративный прокси-сервер и установить его через HTTP_PROXY и HTTPS_PROXY переменные окружения в моем конвейере Jenkins.После небольшой отладки заметил, что Cypress пытается что-то сделать с прокси.Как только я установлю NO_PROXY = localhost кипарис подключен, успех!

0 голосов
/ 16 февраля 2019

На самом деле было несколько проблем:

  1. Кажется, мне нужно было использовать http-get вместо http.Итак: wait-on: 'http-get://localhost:4200'
  2. У меня все еще были проблемы с переменными среды, на которые были заданы вопросы и ответы здесь .

Итак, окончательный файл конфигурациив итоге выглядело так:

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'

С файлом api-key.ts, на который ссылается оператор sed, было похоже:

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: ""
};
0 голосов
/ 04 февраля 2019

Я думаю, что смогу помочь с проблемой ng command not found.

Вам необходимо установить angl cli в ваших зависимостях dev:

npm install --save-dev @angular/cli@latest

Затем после запуска npm install в вашемСценарий ng будет существовать, поэтому вы можете добавить свой шаг ng serve для запуска сервера.

...