簡體   English   中英

如何從 docker 容器運行 Karma 測試?

[英]How to run Karma tests from docker container?

我最近將我的 node.js 應用程序移到了 docker 映像中,我想在映像中運行我的測試。 我的 mocha/node 測試工作正常,但 Karma 測試涉及啟動 Chrome 以運行測試,並且 Chrome 未安裝在容器中。

我該如何解決這個問題?

  • 在容器中安裝 Chrome? 似乎不太理想,因為我不想將 Chrome 發送到容器內的生產服務器。
  • 以某種方式允許它連接到主機上的 Chrome?
  • 創建一個從我的應用圖像繼承並添加 Chrome 和其他東西的新圖像?

谷歌搜索 'docker & karma' 會顯示 docker 圖像,但我找不到有關如何思考問題和最佳方法的說明。

我發現這個 docker 鏡像是在 Concourse CI 上的 docker 容器內快速運行業力測試的絕佳起點:

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

它包含節點 6.x(最新)+ npm 和使用 X 虛擬幀緩沖區的無頭鉻實例。 為我工作很棒!

還有protractor-runner項目,Karma 類似於運行 Protractor,所以你可以從那個例子中學習如何去做。 但是,我更喜歡使用chromium-xvfb-js圖像的建議。

你可以試試這個(在 Alpine Linux 中測試過):

選項1

  1. 確保主機可以訪問9876端口。

  2. 安裝

     apk add chromium # NOT google-chrome-stable
  3. 創建一個以無頭模式啟動chromium-browser的包裝腳本:

     vi /usr/bin/google-chrome-stable

    添加以下行:

     #!/bin/sh chromium-browser \ --no-sandbox \ --headless \ --disable-gpu \ --remote-debugging-port=9222 \ "$@"
  4. 使其可執行:

     chmod +x /usr/bin/google-chrome-stable
  5. 無頭模式運行測試:

     ng test --browsers ChromeHeadless

選項 2

您還可以在名為Xvfb虛擬X 服務器中運行瀏覽器:

  1. 刪除/usr/bin/google-chrome-stable腳本中的--headless選項。

  2. 啟動服務器並導出DISPLAY變量:

     Xvfb :1 -ac -screen 0 1024x768x24 & export DISPLAY=:1
  3. 運行測試:

     ng test

使用PhantomJS而不是 Chrome。 Karma 有PhantomJS 啟動器

基於 Blink 的 PhantomJS。

安裝 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. 刪除庫和工具
  6. 刪除 NodeJS
  7. 刪除 PhantomJS

測試正在運行,生產容器中沒有 PhantomJS。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM