Docker (узел: 8.15-alpine) + Хром + Карма юнит-тесты не работают - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь запустить свои тесты внешнего интерфейса на Docker (узел: 8.15-alpine) с использованием Chromium и Karma, однако получаю множество ошибок, связанных с 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

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Кажется, есть некоторые проблемы, связанные с узлом : изображение 8-alpine , которое вы используете. См. https://github.com/puppeteer/puppeteer/issues/379. Я не знаю, является ли это той же проблемой, но я смог запустить ваши тесты, используя узел : 8.15-slim в качестве базового образа вашего базового Dockerfile

. Вам понадобится также обновите ваш файл Docker:

FROM olliecaine/base:master

WORKDIR /project

# Install Chrome
RUN apt update && apt install -y chromium

В идеале вы бы добавили ENV CHROME_BIN = / usr / bin / chromium к этому Dockerfile, но по какой-то причине это неправильно устанавливает переменную .

Чтобы проверить это самостоятельно и вставьте console.log(process.env.CHROME_BIN) в начало файла build / karma.config. js, вы увидите, что значение по-прежнему равно / usr / bin / chromium-browser при запуске тестов.

В качестве обходного пути мне пришлось вставить эту строку в начало файла build / karma.config. js:

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

Дайте мне знать, если вы понимаете, почему инструкция ENV не работает, мне интересно.

0 голосов
/ 18 февраля 2020

Спасибо, Батист, твой ответ помог мне убедиться, что исправление работает. По сути, в итоге я использовал другой URL для alpine linux .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.alpine linux .org / alpine / v3.8 / вместо edge .

Приветствия за вашу помощь!

...