Я устанавливаю непрерывную интеграцию для проекта, и снова нашел уведомление Copy-and-Speeding код командной строки, который я не совсем понял. На этот раз это пришло из Cypress.io Чтобы запустить тесты интеграции на удаленном сервере:
> npm start & wait-on http://localhost:8080 > cypress run
Я знал &
был критичен, но я не понял почему. У меня такое ощущение, что я не одинок. Так что давайте исправить это.
Для образовательных целей мы будем использовать:
> http-server & wait-on http://localhost:8080 && cypress run; kill $!
Если вы хотите следовать, у меня есть примеры, с которыми вы можете играть в Легкозафик/и-а-и-и и работает на Трэвис CI Отказ
TL; DR: Перейти к excremshell.com.
Перед погружением в синтаксис Harder Bash давайте устроим модули узлов из пути. Для простоты, предположим, что все работает.
Процессы узла
HTTP-сервер
это модуль NPM, который подает крошечное веб-приложение из коробки. Как только сервер запускается, он постоянно работает на потоке, блокирует любую другую работу. Если вы работаете на местном уровне, это не проблема, потому что вы можете открыть новую вкладку в терминале, но целью здесь является запустить это и наши тесты на удаленном сервере CI.
ждать http://localhost: 8080
киоски те нить пока HTTP-сервер
готовит и служит странице. Наш сервер не собирается дать нам программную информацию о том, что страница готова, поэтому, если мы не паузы здесь, наши тесты будут работать слишком рано и потерпеть неудачу.
Cypress Run
Запускает наши тесты в безголовом режиме.
Bash Connections.
&
&
Выполняет команду на левой стороне на заднем плане. Бег http-сервер &
сервер больше не будет блокировать нить.
🤔 Есть много других целей для справочных задач. Например: ESLINT ./SRC/* и NPM пробежать тест
Отказ В этом случае проживание и тестирование можно сделать параллельно, чтобы сэкономить некоторое время. Но это не вся история; Мы снова проверим это немного позже.
& &
&&
Работает, похожие на тот же оператор в JavaScript. Операция на правой стороне работает только, если операция на левой стороне возвращает правда
или в Bash, статус выхода 0
Отказ ждать
Возвращает это 0.
Когда страница готова, что очищает путь для Cypress Run
Отказ
;
;
это стандартный сепаратор команд. В отличие от &&
, ;
не требует определенного состояния выхода. Наш пример все равно будет работать, если мы использовали ;
вместо &&
, но что это Предполагая, что все идет как запланировано.
❓ Если вы хотите увидеть следствие &&
против ;
Попробуйте NPM Run Simulation-Server-Crash-Semi
и NPM запустить Simulate-Server-Crash-с-и
в и-а-и-и Отказ
убийство
Убить
Убивает процесс с данным идентификатором процесса.
$!
$!
это специальный символ, который удерживает идентификатор процесса последнего поступательного процесса. Для нас это наш сервер. Поэтому, когда связаны с Убить
это убивает по фоновому серверу после Тесты закончили.
🤔 Была проблема с ESLINT ./SRC/* и NPM пробежать тест
Пример раньше. Как с http-сервер &
, нет способа узнать, если Eslint
прошел или не удалось. Таким образом, мы могли бы в конечном итоге с ложным положительным, где проходят тесты, но переживание не удается. Мы можем исправить это с && ждать $!
. &&
Обеспечивает, что мы проверим только результаты льминанта, если наши тесты прошли. ждать
это команда Bash, которая ожидает данного процесса, заканчивая и вернуть код выхода из процесса. Когда сочетается с Дорогая!
, он будет ждать прошедших задач и (при условии, что он может закончить) Возвращает код выхода.
Заворачивать
Есть модули NPM, такие как Start-Server-and-test и одновременно Это может упростить такую работу, поэтому вам не нужно &
, &&
, ;
, но всегда приятно узнать немного больше о другом языке. Я все еще изучаю эти вещи, поэтому, если вы поймали то, что я пропустил или имею дополнительные примеры/использование, пожалуйста, оставьте комментарий. Я хотел бы узнать больше.
Спасибо всем моим редакциям, Дебби, Вилле, Джастину и Джулиану.
Оригинал: “https://dev.to/easilybaffled/just-a-little-bash-and-and-more-43dh”