我创建了一个运行我的角度项目的docker容器,现在我试图在容器内运行我的单元测试失败。我需要一个无头浏览器来运行我的测试,而PhantomJS对于我的口味来说太麻烦了,在运行测试时也会给Chrome带来不同的结果。
在这里,我提供了我的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"]
我尝试使用Headless Chrome,但它还需要一些我不知道如何操作的配置。有没有想过的人?
答案 0 :(得分:2)
我在我的前端Dockerfile中安装了Chrome:
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
}
},
答案 1 :(得分:0)
如果你使用的是Selenium,我建议你创建一个不同的容器来执行selenium测试,我们称之为selenium-container
。由于您使用的是Node,因此您可以编写单元测试的现有selenium webdriver for node。
除了该容器,您可以使用the chrome standalone server作为无头浏览器,以便您可以从selenium-container执行单元测试,我们将其称为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