我的目标:
使用Karma/Jasmine在我的Angular 6应用程序(在Docker容器内运行)上运行单元测试。为了运行这些测试,我似乎需要一个Web浏览器。所以看起来Chromium headless是一个不错的选择。我已经通过我的Dockerfile安装了它沿着一堆其他库,但是在Docker容器内运行我的测试失败了(在它之外运行测试工作正常)。
错误:
23 02 2019 04:28:08.884:ERROR [launcher]: ChromiumHeadless stdout:
23 02 2019 04:28:08.884:ERROR [launcher]: ChromiumHeadless stderr: [0223/042808.557529:WARNING:dns_config_service_posix.cc(326)] Failed to read DnsConfig.
[0223/042808.591436:FATAL:udev_loader.cc(38)] Check failed: false.
实际上,打开浏览器(http://localhost:9876/),然后运行测试仍然会导致headless失败,但测试会显示在浏览器中。很高兴看到测试,但如果我希望这些单元测试最终作为CI的一部分或其他东西运行,就没有太大帮助了。
我的猜测是,我可能实际上不需要DNS工作(它确实说警告从stderr输出),但我不知道如何去禁用它。
以下是Karma测试运行程序中的当前浏览器配置:
browsers: ['ChromeHeadlessCustom'],
customLaunchers: {
ChromeHeadlessCustom: {
base: 'ChromiumHeadless',
flags: [
'--no-sandbox',
'--allow-insecure-localhost',
'--homepage=about:blank',
'--no-first-run',
'--headless',
'--disable-software-rasterizer',
'--disable-gpu',
'--disable-translate',
'--disable-extensions',
'--disable-setuid-sandbox',
'--remote-debugging-port=9876'
]
}
}
唯一重要的标志是headless
和no-sandbox
标志,我在浏览其他帖子时抛出的所有其他标志似乎都没有任何效果。
Dockerfile(我认为我成功安装了Chromium的位置):
FROM node:8-alpine
# Install Google Chrome to run Angular unit tests
ENV CHROME_BIN="/usr/bin/chromium-browser"
ENV LIGHTHOUSE_CHROMIUM_PATH /usr/bin/chromium-browser
RUN \
echo "http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \
&& echo "http://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories \
&& echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories \
&& apk --no-cache update \
&& apk --no-cache upgrade \
&& apk add --no-cache --virtual .build-deps gifsicle pngquant optipng libjpeg-turbo-utils udev ttf-opensans chromium
&& rm -rf /var/cache/apk/* /tmp/* /usr/include
因此,如果有人对下一步有任何建议,或者如果我错过了运行这些测试的其他明显的简单方法,那将不胜感激!
1条答案
按热度按时间nbewdwxp1#
我遇到了同样的问题,未能定位问题。但正如我发现的,像this Dockerfile中的instag包产生工作图像,没有这个错误。
这将修复问题,但不会揭示其原因。