[英]How to run Karma tests from docker container?
我最近將我的 node.js 應用程序移到了 docker 映像中,我想在映像中運行我的測試。 我的 mocha/node 測試工作正常,但 Karma 測試涉及啟動 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
確保主機可以訪問9876
端口。
安裝鉻:
apk add chromium # NOT google-chrome-stable
創建一個以無頭模式啟動chromium-browser
的包裝腳本:
vi /usr/bin/google-chrome-stable
添加以下行:
#!/bin/sh chromium-browser \ --no-sandbox \ --headless \ --disable-gpu \ --remote-debugging-port=9222 \ "$@"
使其可執行:
chmod +x /usr/bin/google-chrome-stable
以無頭模式運行測試:
ng test --browsers ChromeHeadless
選項 2
您還可以在名為Xvfb的虛擬X 服務器中運行瀏覽器:
刪除/usr/bin/google-chrome-stable
腳本中的--headless
選項。
啟動服務器並導出DISPLAY
變量:
Xvfb :1 -ac -screen 0 1024x768x24 & export DISPLAY=:1
運行測試:
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 做了一層。 在這一層
測試正在運行,生產容器中沒有 PhantomJS。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.