Docker(节点:8.15-高山)+ 铬 + 业力单元测试不起作用



我正在尝试使用Chromium和Karma在Docker(节点:8.15-alpine(上运行我的前端测试,但是我收到了很多与ChromeHeadless相关的错误。

这些测试曾经有效,但最近它们突然停止了,所以我猜它要么与第三方依赖项(apk?(有关,要么与本地 Docker 安装有关。

我已经在存储库上创建了一个分支,其中包含一个易于运行的命令,该命令重现了该问题。 README.md 这里: https://github.com/olivercaine/react-redux-starter-kit-extended/tree/bug/cant-run-unit-tests-in-docker

任何这方面的帮助将不胜感激!

谢谢。

预期成果:

[output of passed tests...]
Finished in 0.026 secs / 0.031 secs @ 19:53:44 GMT+1100 (AEDT)
SUMMARY:
✔ 46 tests completed

实际结果:

13 02 2020 09:10:45.314:ERROR [launcher]: Cannot start ChromeHeadless
13 02 2020 09:10:45.316:ERROR [launcher]: ChromeHeadless stdout:
13 02 2020 09:10:45.317:ERROR [launcher]: ChromeHeadless stderr:
13 02 2020 09:10:45.772:ERROR [launcher]: Cannot start ChromeHeadless
13 02 2020 09:10:45.772:ERROR [launcher]: ChromeHeadless stdout:
13 02 2020 09:10:45.773:ERROR [launcher]: ChromeHeadless stderr:
13 02 2020 09:10:45.939:ERROR [launcher]: Cannot start ChromeHeadless
13 02 2020 09:10:45.939:ERROR [launcher]: ChromeHeadless stdout:
13 02 2020 09:10:45.939:ERROR [launcher]: ChromeHeadless stderr:
13 02 2020 09:10:46.424:ERROR [launcher]: ChromeHeadless failed 2 times (cannot start). Giving up.
Finished in 0 secs / 0 secs @ 09:10:46 GMT+0000 (UTC)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! react-redux-starter-kit@3.0.1 test: `cross-env NODE_ENV=test karma start build/karma.config`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the react-redux-starter-kit@3.0.1 test script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2020-02-13T09_10_46_935Z-debug.log

更新:

上述 URL 已被删除,但完整的(现在工作(存储库可以在这里找到:

https://github.com/olivercaine/react-redux-starter-kit-extended/tree/modpack/latest

您正在使用的节点:8-高山图像似乎存在一些问题。请参阅 https://github.com/puppeteer/puppeteer/issues/379。我不知道这是否是同样的问题,但我能够使用node:8.15-slim作为基本 Dockerfile 的基本映像运行您的测试

您还需要更新您的开发 Dockerfile:

FROM olliecaine/base:master
WORKDIR /project
# Install Chrome
RUN apt update && apt install -y chromium

理想情况下,您可以将ENV CHROME_BIN=/usr/bin/chromium添加到此 Dockerfile 中,但由于某种原因,这没有正确设置变量。

要自己检查,并在build/karma.config.js文件的开头插入console.log(process.env.CHROME_BIN),在运行测试时,您将看到值仍然是/usr/bin/chromium-browser。

作为解决方法,我必须在build/karma.config.js文件的开头插入以下行:

process.env.CHROME_BIN = '/usr/bin/chromium'

如果您了解为什么 ENV 指令不起作用,请告诉我,我很感兴趣。

谢谢巴蒂斯特,您的回答帮助我验证了修复程序是否有效。 基本上,我最终所做的是使用不同的URL进行 alpinelinux.org。

最后,我将Dockerfile更改为:

FROM node:8.15-alpine
WORKDIR /project
# Install Chrome
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 chromium 
&& rm -rf /var/cache/apk/* /tmp/*
ENV CHROME_BIN /usr/bin/chromium-browser

这似乎正确设置了 CHROME_BIN env 变量,允许我在 Alpine 容器中运行我的测试。这也意味着我也不需要更新 karma.config.js 文件。以前我使用nl.alpinelinux.org/alpine/v3.8/而不是edge

为您的帮助干杯!

最新更新