Как запустить тесты Karma из контейнера-докера?

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

Как мне решить эту проблему?

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

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

Ответ 1

Я нашел, что это изображение докеры является отличной отправной точкой для быстрого запуска тестов кармы внутри контейнера докеров в Concourse CI:

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

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

Ответ 2

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

PhantomJS на основе Blink.

Установите PhantomJS:

npm karma-phantomjs-launcher --save-dev

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

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

ИЗМЕНИТЬ

Вот часть 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

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

  • установить библиотеки и инструменты (debian jessie)
  • установить PhantomJS
  • установить NodeJS
  • запустить тесты
  • удалить библиотеки и инструменты
  • удалить NodeJS
  • удалить PhantomJS

Тесты запущены и у вас нет PhantomJS в рабочем контейнере.