Запуск docker-compose через npm - PullRequest
0 голосов
/ 13 мая 2019

У меня есть небольшое приложение, в котором я хочу запустить несколько браузерных тестов Мне интересно, каков был лучший подход. Сначала я думал поместить все в мой package.json, но я не понимаю, как я могу раскрутить docker-compose, запустить тесты и убить docker-compose.

Например, я бы сделал что-то вроде:

"scripts": {
    "test": "docker-compose up && mocha --ui tdd test/**/*.test.js --reporter spec && docker-compose down

Но я не уверен, что это возможно.

Что сегодня используется для достижения этой цели? Заранее спасибо.

Приветствия

1 Ответ

0 голосов
/ 13 мая 2019

Похоже, у вас возникла проблема с синхронизацией, когда ваши тесты пытаются получить доступ к сервисам до того, как ваше тестовое устройство достигнет точки, когда сервисы будут доступны. (Это может быть что-то вроде приложения узла с HTTP-сервером, который прослушивает запросы API, например.)

Когда вы делаете docker-compose up -d, процесс docker-compose завершается до того, как внутри контейнерных сервисов будут созданы их сокеты и начнется прослушивание соединений. Это означает, что если следующее, что вы делаете, это запускаете свои тесты, которые пытаются открыть соединение со службами, запущенными docker-compose, возникает условие состязания, когда служба еще может быть недоступна.

Вам нужно будет выполнить тест, чтобы при попытке открыть соединение, если он обнаружил тайм-аут, он повторяет попытку несколько раз (достаточно времени и попыток, чтобы ваши контейнеры достигли состояния, в котором они прослушивают). и готовы обслуживать запросы, прежде чем сдаться.)

Обычно вы можете просто иметь простое автономное приложение, которое неоднократно пытается открыть сервисный порт и возвращает успех в случае успеха (или повторяет попытку, если время ожидания достигает некоторого максимума, когда возвращается ошибка). Вставьте это перед запуском тестов, чтобы убедиться, что ваши сервисы достигли состояния прослушивания.

Я настоятельно рекомендую прочитать Docker Compose: ждать зависимостей

В этой статье описывается симпатичный маленький образ docker, который вы можете использовать, который будет неоднократно пытаться открыть порт TCP, пока он не преуспеет. Вы можете использовать его для синхронизации вашего теста с сервисами тестового оборудования, которые требуются для теста.

...