Я делаю свои первые предварительные шаги в современной разработке 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
), и это не имеет значения.
Похоже, проблема в предустановке, но, насколько я могу судить, моя предустановка соответствует тому, что предлагают документы. Что я должен попробовать дальше?