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

时间:2015-12-15 10:05:33

标签: javascript docker karma-runner

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

我该如何解决这个问题?

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

谷歌搜索'码头工人& karma'在那里发现了docker图像,但我找不到如何思考问题和最佳方法的说明。

3 个答案:

答案 0 :(得分:3)

我发现这个码头图像是在Concourse CI上的docker容器内快速运行业力测试的绝佳起点:

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

它包含节点6.x(最新)+ npm以及使用X虚拟帧缓冲的无头铬实例。对我有用!

答案 1 :(得分:0)

还有一个protractor-runner项目,而Karma与运行Protractor相似,因此您可以从该示例中学习如何做。但是,我更喜欢使用chromium-xvfb-js图片的建议。

答案 2 :(得分:-4)

使用PhantomJS代替Chrome。 Karma有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 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

在这种情况下,Docker制作了一个图层。在这一层

  1. 安装库和工具(debian jessie)
  2. 安装PhantomJS
  3. 安装NodeJS
  4. 运行测试
  5. 删除libs和工具
  6. 删除NodeJS
  7. 删除PhantomJS
  8. 测试正在运行,您在生产容器中没有PhantomJS。