2015-12-15 5 views
11

私は最近、node.jsアプリケーションをドッカー画像に移動しました。画像内でテストを実行したいと思います。私のmocha/nodeテストは正常に動作しますが、Karmaテストではテストを実行するためにChromeを起動する必要があり、Chromeはコンテナにインストールされていません。ドッカーコンテナからカルマテストを実行するには?

これに対処するにはどうすればよいですか?

  • コンテナにChromeをインストールしますか?コンテナ内のプロダクションサーバーにChromeを同梱したくないので理想的ではないようです。
  • 何とかホスト上のChromeに接続できるようにしますか?
  • 私のアプリイメージを継承し、Chromeなどを追加する新しいイメージを作成しますか? 「ドッカ&カルマ」をグーグルで

はそこにドッキングウィンドウの画像を明らかにするが、私は、問題と最善のアプローチについて考える方法の手順を見つけることができません。

+0

はhttps:// githubでご覧になれます。com/jfrazelle/dockerfiles/blob/master/chrome/stable/Dockerfile about Chrome – user2915097

+0

これまでのブログ記事を読んでくれてありがとうございます。 – MichaelJones

+0

「自分のアプリイメージから継承してChromeなどを追加する新しい画像を作成する」と表示された場合、スーパーバイザーのhttps://docs.docker.com/engine/articles/using_supervisord/またはそのようなもの(s6、 runit、daemon tools ...)あなたのプロセスを管理する – user2915097

答えて

-4

Chromeの代わりにPhantomJSを使用してください。カルマはPhantomJS launcherです。

点滅に基づくPhantomJS。

PhantomJSをインストールします。

npm karma-phantomjs-launcher --save-dev 

カルマの設定に追加します。ここでは

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

EDIT

は、一部の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 [email protected]"$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つのレイヤーを作成しました。この層

  1. でNodeJS
  2. はPhantomJS
  3. を削除LIBSとツール
  4. を削除PhantomJS
  5. NodeJSに
  6. 走行テストをインストール
  7. をインストールLIBSとツール(Debianのジェシー)
  8. をインストール

テストが実行されていて、プロダクションコンテナにPhantomJSがありません。

私はこのドッキングウィンドウのイメージはコンコースCI上のドッキングウィンドウコンテナ内で迅速カルマのテストを実行するための優れた出発点であることがわかってきました
+0

入力のおかげで、ドッカーからChromeを起動することは可能ですが、私はこのアプローチを試みるかもしれません。ほとんどの場合、ドッカーコンテナをかなり小さく保つことは可能ですか、それともすべてのテスト項目を追加する必要がありますか?私はすでにnpmモジュールをテスト用に用意しているので、クロムとセレンのインストールには不合理ではないかもしれませんが、理想的ではありません。おそらく私のテストスクリプトは、テストの一部として依存関係を追加することができますか?しかし、それは少し重いようです。 – MichaelJones

+0

Docker内でChromeを使用することをお勧めします。 PhantomJSはChrome WebKitに基づいており、テストを実行するには非常に良い選択肢です。 ChromeはX11を実行する必要があります。 PhantomJSはありません。セレニウムを実行するには、GhostDriverを使用します。 –

+0

私はあなたのポイントを取る。現時点で私の質問は、PhantomJSをプロダクションに出荷することが良いアイデアか標準的な慣行かどうかです。なぜなら、私はテストのためにイメージにそれを必要としているか、あるいはテストインフラストラクチャをすべてプロダクションイメージに追加することなくテストを実行する方法があるからです。 – MichaelJones

3

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

これは、ノードの6.x(最新)+ NPMが含まれていますX仮想フレームバッファを使用するヘッドレスクロムインスタンス。私にとって素晴らしい仕事!

+0

何をやっているのかもう少し説明できますか?ドッカーを使用して別のコンテナでこれを実行することは可能ですか?または私のテストは、このイメージでコンテナ内で実行する必要がありますか? – amp

+0

@ampテストはこのコンテナ内で実行する必要があります。このコンテナの全体的なポイントは、カルマテストを実行できるクロムインストールが含まれていることです。好きなようにコンテナを始めることができます。 'docker exec'を使うか、コンテナイメージを独自のDockerfileのベースとして使用してください。 –

関連する問題