Как заставить Jest работать с сервером MongoDB в памяти? - PullRequest
0 голосов
/ 22 декабря 2019

Я делаю свои первые предварительные шаги в современной разработке JS, и для этого я пишу приложение с намерением запустить его на Mongo Stitch. Я пытаюсь придерживаться разработки TDD, отчасти потому, что это хорошая практика, а отчасти потому, что гораздо проще запускать вещи локально, чем в среде Stitch.

У меня есть рабочая среда Docker / Alpine,и он запускает модульные тесты против функций Stitch, используя Jest. Однако сейчас я пишу функции, в которых условные выражения / логика находятся в Mongo, поэтому модульных тестов недостаточно для защиты от регрессий.

Первоначально я планировал развернуть экземпляр MongoDB 4.0 в Docker Compose, а затемвыяснить, как подключиться к нему в Jest. Однако Документы Jest указывают мне на MongoDB в памяти, который звучит довольно хорошо. К сожалению, настройка кажется нетривиальной, и я сталкиваюсь с рядом ошибок.

Я использую Yarn для извлечения зависимостей. Поскольку это, похоже, компилирует некоторые двоичные файлы, я подумал, не затрудняет ли мое пребывание на Alpine (сборки BusyBox, как правило, немного сложнее). Поэтому я поменялся на Ubuntu. Мой Dockerfile довольно прост:

FROM ubuntu:18.04

WORKDIR /root

RUN apt-get update && apt-get install -y curl gnupg
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list

# Install runtime and test tools
RUN apt-get update && apt-get install -y nodejs yarn --no-install-recommends yarn
RUN yarn global add jest @shelf/jest-mongodb mongodb-memory-server

CMD ["/bin/sh"]

В документах указано, что мне нужно нечто, называемое предустановкой, которое хранится в package.json:

{
    "jest": {
        "preset": "@shelf/jest-mongodb"
    }
}

Вот как выглядит команда установки Yarnнапример (и мне интересно, уместны ли предупреждения «нет двоичных файлов»):

yarn global v1.21.1
warning package.json: No license field
[1/4] Resolving packages...
warning jest > jest-cli > jest-config > jest-environment-jsdom > jsdom > left-pad@1.3.0: use String.prototype.padStart()
[2/4] Fetching packages...
info fsevents@1.2.11: The platform "linux" is incompatible with this module.
info "fsevents@1.2.11" is an optional dependency and failed compatibility check. Excluding it from installation.
[3/4] Linking dependencies...
warning " > @shelf/jest-mongodb@1.1.3" has unmet peer dependency "mongodb@3.x.x".
[4/4] Building fresh packages...
success Installed "jest@24.9.0" with binaries:
      - jest
warning "@shelf/jest-mongodb@1.1.3" has no binaries
warning "mongodb-memory-server@6.1.1" has no binaries
Done in 68.90s.

Наконец, здесь запускается Jest, который сразу завершается неудачей:

# jest
● Validation Error:

  Preset @shelf/jest-mongodb not found.

  Configuration Documentation:
  https://jestjs.io/docs/configuration.html

Я также пытался yarn global add jest @shelf/jest-mongodb mongodb-memory-server --dev (т. Е. Добавление флага --dev), и это не имеет значения.

Похоже, проблема в предустановке, но, насколько я могу судить, моя предустановка соответствует тому, что предлагают документы. Что я должен попробовать дальше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...