2015-12-15 21 views
11

Gần đây tôi đã chuyển ứng dụng node.js của mình thành hình ảnh trên đế và tôi muốn chạy thử nghiệm bên trong hình ảnh. Các thử nghiệm mocha/nút của tôi hoạt động tốt nhưng các thử nghiệm Karma liên quan đến việc khởi động Chrome để chạy thử nghiệm và Chrome chưa được cài đặt trong vùng chứa.Làm cách nào để chạy thử nghiệm Karma từ vùng chứa docker?

Tôi làm cách nào để giải quyết vấn đề này?

  • Cài đặt Chrome trong vùng chứa? Có vẻ ít hơn lý tưởng vì tôi không muốn chuyển Chrome đến các máy chủ sản xuất của mình bên trong vùng chứa.
  • Bằng cách nào đó cho phép ứng dụng kết nối với Chrome trên máy chủ lưu trữ?
  • Tạo hình ảnh mới kế thừa từ hình ảnh ứng dụng của tôi và thêm Chrome và những thứ khác?

Googling 'docker & karma' tiết lộ hình ảnh đế ngoài nhưng tôi không thể tìm thấy hướng dẫn về cách suy nghĩ về vấn đề và cách tiếp cận tốt nhất.

+0

có giao diện https: // github.com/jfrazelle/dockerfiles/blob/master/chrome/stable/Dockerfile về Chrome – user2915097

+0

Cảm ơn tôi đã đọc bài đăng trên blog phía sau đó trước đây nhưng nó không làm rõ cho tôi cách tiến hành trong trường hợp này. – MichaelJones

+0

nếu bạn đi với "Tạo một hình ảnh mới kế thừa từ hình ảnh ứng dụng của tôi và thêm Chrome và những thứ khác?", Bạn sẽ cần người giám sát https://docs.docker.com/engine/articles/using_supervisord/ hoặc như vậy (s6, runit, các công cụ daemon ...) để quản lý các quy trình của bạn – user2915097

Trả lời

-4

Sử dụng PhantomJS thay vì Chrome. Karma có PhantomJS launcher.

PhantomJS dựa trên Blink.

Install PhantomJS:

npm karma-phantomjs-launcher --save-dev 

Thêm vào Karma config:

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

EDIT

Đây là phần 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 

Trong trường hợp này Docker tạo một lớp. Trong lớp này

  1. cài đặt libs và các công cụ (debian jessie)
  2. cài đặt PhantomJS
  3. cài đặt NodeJS
  4. chạy thử nghiệm
  5. loại bỏ libs và các công cụ
  6. loại bỏ NodeJS
  7. loại bỏ PhantomJS

Thử nghiệm đang chạy và Bạn không có PhantomJS trong vùng chứa sản xuất.

+0

Cảm ơn bạn đã nhập liệu, tôi có thể thử phương pháp này mặc dù có thể khởi chạy Chrome từ docker để tôi tò mò hơn về việc tìm kiếm cách tốt nhất. Chủ yếu, nó là nó có thể giữ container docker khá tối thiểu hoặc tôi phải thêm tất cả các công cụ thử nghiệm cho nó là tốt? Tôi đã có mô-đun npm để thử nghiệm vì vậy có lẽ nó không phải là không hợp lý để apt-get cài đặt chrome và selenium là tốt nhưng nó cảm thấy ít hơn lý tưởng. Có lẽ kịch bản thử nghiệm của tôi có thể thêm phụ thuộc như là một phần của thử nghiệm? Nhưng điều đó có vẻ hơi nặng. – MichaelJones

+0

Tôi không nghĩ nên sử dụng Chrome trong Docker. PhantomJS dựa trên Chrome WebKit và nó rất tốt để chạy thử nghiệm. Chrome cần X11 để chạy. PhantomJS thì không. Để chạySelenium, hãy sử dụng GhostDriver. –

+0

Tôi lấy điểm của bạn. Câu hỏi của tôi vào thời điểm này là ý tưởng hay là thực hành tiêu chuẩn để đưa PhantomJS vào sản xuất vì tôi cần nó trong hình ảnh của tôi để kiểm tra hoặc có cách chạy thử nghiệm mà không thêm tất cả cơ sở hạ tầng thử nghiệm vào hình ảnh sản xuất hay không. – MichaelJones

3

Tôi đã tìm thấy hình ảnh Docker này là một điểm khởi đầu tuyệt vời cho chạy thử nghiệm nghiệp một cách nhanh chóng trong một container Docker trên Concourse CI:

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

Nó chứa nút 6.x (mới nhất) + NPM và một thể hiện crom không đầu sử dụng bộ đệm khung hình ảo X. Làm việc tuyệt vời cho tôi!

+0

Bạn có thể giải thích thêm một chút về việc bạn đang làm gì không? Bạn có điều đó có thể sử dụng docker-compose và chạy nó trong một container riêng biệt? hoặc thử nghiệm của tôi phải chạy trong vùng chứa với hình ảnh này? – amp

+0

@amp các thử nghiệm phải chạy bên trong vùng chứa này. Toàn bộ điểm của container này là nó chứa một cài đặt chromium có khả năng thực hiện các thử nghiệm nghiệp. Tuy nhiên, bạn có thể bắt đầu vùng chứa mà bạn thích, ví dụ: sử dụng 'docker exec' hoặc sử dụng hình ảnh vùng chứa làm cơ sở cho Dockerfile của riêng bạn. –

Các vấn đề liên quan