2015-12-15 2 views
11

Недавно я переместил приложение node.js в образ докеры, и я хотел бы запустить свои тесты внутри изображения. Мои тесты мокко/узла работают нормально, но тесты Karma включают запуск Chrome для запуска тестов, а Chrome не установлен в контейнере.Как запустить тесты кармы из контейнера-докера?

Как я могу обратиться к этому вопросу?

  • Установить Chrome в контейнере? Кажется менее идеальным, поскольку я не хочу отправлять Chrome на мои производственные серверы внутри контейнера.
  • Как-то разрешить подключение к Chrome на хосте?
  • Создайте новое изображение, которое наследуется от моего изображения приложения и добавляет Chrome и другие вещи?

погуглить «Докер & карму» показывает Docker изображения там, но я не могу найти инструкции о том, как думать о проблеме, и лучший подход.

+0

посмотрите на https: // github.com/jfrazelle/dockerfiles/blob/master/chrome/stable/Dockerfile о Chrome – user2915097

+0

Спасибо, что я прочитал сообщение в блоге позади этого раньше, но он не уточняет, как действовать в этом случае. – MichaelJones

+0

, если вы идете с «Создать новое изображение, которое наследуется от моего изображения приложения и добавляет Chrome и другие вещи?», Вам понадобится супервизор https://docs.docker.com/engine/articles/using_supervisord/ или такой (s6, runit, daemon tools ...) для управления вашими процессами – user2915097

ответ

-4

Использовать PhantomJS вместо Chrome. Карма имеет PhantomJS launcher.

PhantomJS основан на Blink.

Установка PhantomJS:

npm karma-phantomjs-launcher --save-dev 

Добавить в Карма конфигурации:

module.exports = function(config) { 
    config.set({ 
    browsers : ['PhantomJS'] 
    }); 
}; 

EDIT

Вот часть OD Dockerfile

ENV NODE_VERSION 0.12.7 
ENV NPM_VERSION 3.5.1 
ENV PHANTOM_JS phantomjs-1.9.8-linux-x86_64 

# App and test 
RUN set -x \ 
    && buildDeps='curl git bzip2 file libfreetype6 libfontconfig1 python-pip python-dev libpq-dev libmemcached-dev libzmq-dev libjpeg62-turbo-dev zlib1g-dev libtiff5-dev make g++ psmisc' \ 
    && apt-get update \ 
    && apt-get install -y $buildDeps --no-install-recommends \ 
    && rm -rf /var/lib/apt/lists/* \ 
    && curl -SLO "https://bitbucket.org/ariya/phantomjs/downloads/$PHANTOM_JS.tar.bz2" \ 
    && tar xvjf $PHANTOM_JS.tar.bz2 \ 
    && mv $PHANTOM_JS /usr/local/share \ 
    && ln -sf /usr/local/share/$PHANTOM_JS/bin/phantomjs /usr/local/bin \ 
    && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz" \ 
    && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ 
    && gpg --verify SHASUMS256.txt.asc \ 
    && grep " node-v$NODE_VERSION-linux-x64.tar.gz\$" SHASUMS256.txt.asc | sha256sum -c - \ 
    && tar -xzf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local --strip-components=1 \ 
    && rm "node-v$NODE_VERSION-linux-x64.tar.gz" SHASUMS256.txt.asc \ 
    && npm install -g [email protected]"$NPM_VERSION" grunt-cli \ 
    && npm install \ 
    && npm cache clear \ 
    && ./node_modules/.bin/bower install --allow-root \ 
    && npm test \ 
    && apt-get purge -y --auto-remove $buildDeps \ 
    && rm -rf /usr/local/bin/node /usr/local/bin/npm /usr/local/include/node /usr/local/lib/node_modules \ 
    && rm -rf /usr/local/share/$PHANTOM_JS /usr/local/bin/phantomjs 

В этом случае Докер сделал один слой. В этом слое

  1. установки LIBS и инструменты (Debian Jessie)
  2. установить PhantomJS
  3. установить NodeJS
  4. тесты прогонов
  5. удалить LIBS и инструменты
  6. удалить NodeJS
  7. удалить PhantomJS

Тестирование выполняется, и у вас нет PhantomJS в производственном контейнере.

+0

Спасибо за ввод, я могу попробовать этот подход, хотя можно запустить Chrome из докера, поэтому мне больше любопытно найти лучший способ продвижения вперед. В основном, возможно ли сохранить контейнер докера минимально или мне нужно добавить все тестовые материалы к нему? У меня уже есть модули npm для тестирования, поэтому, возможно, нецелесообразно apt-get установить хром и селен, но он чувствует себя не так, как идеально. Возможно, мой тестовый скрипт может добавить зависимости как часть теста? Но это тоже немного тяжело. – MichaelJones

+0

Я не думаю, что рекомендуется использовать Chrome внутри Docker. PhantomJS на основе Chrome WebKit, и это очень хорошая альтернатива для запуска теста. Для Chrome требуется X11. Фантом. Чтобы runSelenium использовал GhostDriver. –

+0

Я принимаю ваше решение. Мой вопрос на данный момент заключается в том, является ли хорошей идеей или стандартной практикой поставлять PhantomJS для производства, потому что мне нужно это на моем изображении для тестирования или есть ли способ запустить тесты без добавления всей тестовой инфраструктуры к образцу. – MichaelJones

3

Я нашел Docker изображение, чтобы быть отличной отправной точкой для запуска кармических испытаний быстро внутри Docker контейнера на Зал CI:

https://hub.docker.com/r/markadams/chromium-xvfb-js/

Он содержит узел 6.x (последние) + НПЙ и безгонный хром-экземпляр с использованием X виртуального фреймбуфера. Отлично работает для меня!

+0

Не могли бы вы немного подробнее рассказать о том, что вы делаете? Вы можете использовать докер-компоновку и запустить ее в отдельном контейнере? или мои тесты должны выполняться в контейнере с этим изображением? – amp

+0

@amp тесты должны проходить внутри этого контейнера. Весь смысл этого контейнера в том, что он содержит установку хрома, которая может выполнять тесты кармы. Вы можете запустить контейнер, как вам нравится, затем, например, используйте 'docker exec' или альтернативно используйте образ контейнера в качестве базы для вашего собственного файла Docker. –

Смежные вопросы