Как запустить тесты 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 в рабочем контейнере.