Ошибка CircleCI: ваши тесты, вероятно, отправляют запросы этому baseUrl, и эти тесты не пройдут, если вы не загрузите свой сервер
Я запускаю приложение 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, первые два задания рабочего процесса выполняются успешно (build и cypress/install), но cypress/run выдает следующую ошибку:
Cypress не может проверить, что сервер, установленный как ваш 'baseUrl', работает:
Ваши тесты, скорее всего, отправляют запросы этому baseUrl, и эти тесты не пройдут, если вы не загрузите свой сервер.
Пожалуйста, запустите этот сервер, а затем снова запустите Cypress.
Я предполагаю, что я не загрузил сервер с npm run build
команда.
Я попытался добавить:
- run:
name: start ng server
command: ng serve
в работе "build", но тогда ошибка была:
/ bin / bash: ng: команда не найдена
Я попытался найти docker-контейнер на dockerhub, который выполнял бы команды ng, и "angular/ngcontainer" казался хорошим кандидатом, потому что при использовании circleci/node:6.10-browser в качестве образа docker по ссылке в руководстве также не распознавались команды 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 ответа
На самом деле здесь было несколько проблем:
- Кажется, мне нужно было использовать http-get вместо http. Так:
wait-on: 'http-get://localhost:4200'
- У меня все еще были некоторые проблемы с моими переменными среды, которые были заданы здесь и даны ответы
Итак, окончательный файл конфигурации выглядит примерно так:
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: ""
};
Я думаю, что могу помочь с ng command not found
проблема.
Вам нужно установить angular cli в ваших зависимостях dev:
npm install --save-dev @angular/cli@latest
Затем после npm install
работает в вашем сценарии ng
будет существовать, чтобы вы могли добавить свой ng serve
шаг, чтобы запустить свой сервер.
Хотя я не думаю, что это относится к вам, этот вопрос всплыл для меня, когда я гуглил свою проблему. Таким образом, в случае, если у другого человека есть подобная проблема, вот как я заставил это работать.
Чтобы заставить некоторые пакеты NPM работать в нашей среде, мне нужно было использовать наш корпоративный прокси и настроить его через HTTP_PROXY
а также HTTPS_PROXY
переменные окружения в моем конвейере Jenkins. После небольшой отладки заметил, что Cypress пытается что-то сделать с прокси. Однажды я установил NO_PROXY = localhost
кипарис на связи, успехов!