Узел в Docker: тест npm и выход

Я хочу протестировать образ докера узла с помощью «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);
});

Что мне сделать, чтобы автоматически выйти из теста, когда он будет завершен?

Попробуйте ENTRYPOINT ["npm", "run"], а затем CMD ["start"], но переопределите cmd всякий раз, когда вы запускаете контейнер с помощью docker run myimage test -- --coverage, и посмотрите, изменит ли это что-нибудь. CMD указывает аргументы по умолчанию для передачи ENTRYPOINT. Я думаю, что точка входа для вашего контейнера может быть неправильной и должна быть переопределена.

zero298 30.04.2019 20:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
1
8 556
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Обнаружено, что команда запуска докера должна содержать -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

Другие вопросы по теме