Я хочу протестировать образ докера узла с помощью «npm run test» в качестве перезаписываемой команды при запуске моего контейнера.
Мой Dockerfile:
FROM node:alpine
WORKDIR /app
COPY ./package.json ./
RUN npm install
COPY ./ ./
CMD ["npm", "run", "start"]
Команда «npm run test» должна быть запущена в моем контейнере и выйти в терминал (локально и Travis CI), но тестовый запуск застрял на «Выполнить все наборы тестов». ожидание ввода.
Моя команда запуска докера:
docker run myimage npm run test -- --coverage
Я также пробовал с:
docker run myimage npm run test -- --forceExit
Но ни один из них не завершается после запуска теста (ни локально, ни в Travis CI).
Мой файл App.test.js — это стандартный тест:
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
it('renders without crashing', () => {
const div = document.createElement('div');
ReactDOM.render(<App />, div);
ReactDOM.unmountComponentAtNode(div);
});
Что мне сделать, чтобы автоматически выйти из теста, когда он будет завершен?





Обнаружено, что команда запуска докера должна содержать -e CI = истина для немедленного выхода:
docker run -e CI=true myimage npm run test
Из документации React о «CI = true»:
The test command will force Test to run in CI-mode, and tests will only run once instead of launching the watcher.
Я использую CI в Travis, и теперь он работает для меня.
sudo: required
services:
-docker
before_install:
- docker build -t sambhaba/dockerdevandprod -f Dockerfile.dev .
script:
- docker run -e CI=true sambhaba/dockerdevandprod npm run test -- --coverage
Мне нужно было добавить ENV CI=true в мой Dockerfile:
ENV CI=true
RUN npm run test
RUN npm run build
Попробуйте
ENTRYPOINT ["npm", "run"], а затемCMD ["start"], но переопределите cmd всякий раз, когда вы запускаете контейнер с помощьюdocker run myimage test -- --coverage, и посмотрите, изменит ли это что-нибудь.CMDуказывает аргументы по умолчанию для передачиENTRYPOINT. Я думаю, что точка входа для вашего контейнера может быть неправильной и должна быть переопределена.