如何从docker容器运行Karma测试?

Mic*_*nes 14 javascript karma-runner docker

我最近将我的node.js应用程序移动到了docker镜像中,我想在图像中运行我的测试.我的mocha/node测试工作正常,但Karma测试涉及启动Chrome以运行测试,而Chrome未安装在容器中.

我该如何解决这个问题?

  • 在容器中安装Chrome?似乎不太理想,因为我不想将Chrome发送到容器内的生产服务器.
  • 以某种方式允许它连接到主机上的Chrome?
  • 创建一个继承自我的应用图片并添加Chrome和其他内容的新图片?

谷歌搜索"码头和业力"揭示了码头图像,但我找不到如何思考问题和最佳方法的说明.

Tom*_*Rup -4

使用PhantomJS而不是 Chrome。Karma 有PhantomJS 启动器

PhantomJS 基于 Blink。

安装 PhantomJS:

npm karma-phantomjs-launcher --save-dev
Run Code Online (Sandbox Code Playgroud)

添加到 Karma 配置:

module.exports = function(config) {
  config.set({
    browsers : ['PhantomJS']
  });
};
Run Code Online (Sandbox Code Playgroud)

编辑

这是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 npm@"$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
Run Code Online (Sandbox Code Playgroud)

在本例中,Docker 制作了一层。在这一层

  1. 安装库和工具 (debian jessie)
  2. 安装 PhantomJS
  3. 安装 NodeJS
  4. 运行测试
  5. 删除库和工具
  6. 删除 NodeJS
  7. 删除 PhantomJS

测试正在运行,但生产容器中没有 PhantomJS。