2017-08-02 96 views
2

我已經創建了一個運行我的角度項目的docker容器,現在我試圖在容器內運行我的單元測試失敗。我需要一個無頭瀏覽器來運行我的測試,而PhantomJS對我的口味來說太麻煩了,在運行測試時也會給Chrome帶來不同的結果。如何在Docker容器中運行單元測試

在這裏,我提供我的Dockerfile:

# download (or use if it's in cache) the latest official image from node 
FROM node:latest 

# create directory in the container and set all privileges 
RUN mkdir -p /usr/src/app && chmod 777 /usr/src/app 

# make the directory available for following commands 
WORKDIR /usr/src/app 

# copy all local's frontend content to the WORKDIR 
COPY . /usr/src/app 

# Expose the port the app runs in 
EXPOSE 4200 

CMD ["npm", "start"] 

我用無頭Chrome嘗試,但仍需要更多的配置,我不知道該怎麼做。任何人有任何想法?

+0

幾個月前我遇到了無頭瀏覽器的問題,一些測試失敗了,因爲它無法將瀏覽器滾動到我試圖查看它們是否存在的元素。如果你有一些失敗的測試,記住這一點。 無論如何,你爲什麼要運行ng服務而不是ng測試? –

+0

,因爲我將在稍後的時刻運行'test'命令 –

+0

您是否在使用Selenium webdriver for NodeJS或者您正在使用protactor? –

回答

2

,我發現了一個辦法做到這一點:

我我的前端內安裝了Chrome Dockerfile:

RUN wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - 
RUN echo 'deb http://dl.google.com/linux/chrome/deb/ stable main' >> /etc/apt/sources.list 
RUN apt-get update && apt-get install --no-install-recommends -y google-chrome-stable 

和我在我的測試中使用了無頭的Chrome,並在karma.config中進行了適當的配置:

browsers: ['Chrome_without_sandbox'], 
customLaunchers: { 
    Chrome_without_sandbox: { 
    base: 'ChromeHeadless', 
    flags: ['--no-sandbox'] // with sandbox it fails under Docker 
    } 
}, 
+0

是的,我發現這種方法也適用。 – cuznerdexter

0

如果您使用的是硒,我建議您創建一個不同的容器來執行硒測試,我們將這個稱爲selenium-container。由於您使用的節點,有現有selenium webdriver for node,你可以在編寫單元測試。

除了該容器,你可以使用the chrome standalone server作爲無頭的瀏覽器,這樣就可以從硒容器執行單元測試,我們會打電話給這個chrome-container

當編寫單元測試,您可以通過連接到模擬瀏覽器服務器是這樣開始你的測試:

var driver = new webdriver.Builder() 
    .forBrowser('chrome') 
    .usingServer('http://localhost:4444/wd/hub') 

這只是讓你開始,該API是有據可查的,易於用於編寫測試。

將單元測試與您的Angular項目隔離很好,這樣它們就不會以任何方式相互干擾。開始測試可以通過使用docker compose的一個命令完成。你docker-compose.yml可能是這個樣子:大量調查後

version: '3' 
services: 
    angular-app: 
    build: 
     context: . 
     dockerfile: Dockerfile 
    selenium_container: 
    build: 
     context: . 
     dockerfile: Dockerfile.selenium.test 
    depends_on: 
     - chrome-container 
     - angular-app 
    chrome-container: 
    image: selenium/standalone-chrome:3.4.0-einsteinium 
+0

謝謝。我會試試看,因爲我還沒有熟練使用Docker,因此我會在接下來的幾天給你提供更新。 –

+0

@PanosVakalopoulos然後這是學習Docker的核心概念的好方法,例如運行多個容器,將它們連接在一起,以及碼頭工作,祝你好運! – Serey

+0

爲什麼我應該調查硒,因爲我現在正在工作,僅用於單元測試?是不是隻需要e2e測試的硒webdriver? –