首页 文章

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

提问于
浏览
14

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

我该如何解决这个问题?

  • 在容器中安装Chrome?似乎不太理想,因为我不想将Chrome发送到容器内的 生产环境 服务器 .

  • 以某种方式允许它连接到主机上的Chrome?

  • 创建一个继承自我的应用图片并添加Chrome和其他内容的新图片?

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

3 回答

  • 3

    我发现这个docker图像是在Concourse CI上的docker容器内快速运行karma测试的一个很好的起点:

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

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

  • -4

    确实是个好问题 . 我惊讶地发现似乎没有直接的答案 . 我在管道中执行测试时最终运行了一个安装脚本 . 该脚本执行所有必要的操作,如下载chrome和配置Xvfb .

  • 0

    使用PhantomJS而不是Chrome . Karma有PhantomJS launcher .

    PhantomJS基于Blink .

    安装PhantomJS:

    npm karma-phantomjs-launcher --save-dev
    

    添加到Karma配置:

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

    EDIT

    这是部分内容 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制作了一层 . 在这一层

    • 安装库和工具(debian jessie)

    • 安装PhantomJS

    • 安装NodeJS

    • 运行测试

    • 删除库和工具

    • 删除NodeJS

    • 删除PhantomJS

    测试正在运行,您在 生产环境 容器中没有PhantomJS .

相关问题