Jest: глобальная настройка async с доступом к jest для насмешливых целей
Сценарий запуска Jest для модульного тестирования API nodejs, выполняющего экземпляр mongodb в памяти (через https://github.com/nodkz/mongodb-memory-server)
Моя цель БД в памяти должна запускаться только один раз для ВСЕХ тестовых файлов.
Почему, хотя запуск 1 базы данных в файл не имеет большого значения (поскольку он работает быстро), наиболее важной причиной является то, что плагин сначала выбирает двоичные файлы mongo посредством интенсивной загрузки (если они еще не находятся в кэше), Поэтому имеет смысл выполнять эту операцию только один раз вместо ОДНОГО НА ФАЙЛ, потому что загрузка происходит точно так же (она берет файлы из Интернета и помещает их в папку).
Проблема Помимо того, что я запускаю монго в памяти, мне также нужно высмеивать мою dbService.js
файл, так что каждый файл в зависимости от него будет использовать поддельную версию (и, следовательно, сервер в памяти). Поэтому я не могу использовать globalSetup
вариант Jest, потому что в этом файле jest
является undefined
, Я даже не могу использовать setupFiles
потому что они запускают PER FILE и они синхронны, в то время как по своей природе mongodb connect мне нужна асинхронная функция. Я пытался также с помощью beforeAll
в каждом файле передается общий служебный модуль, но поскольку тестовые файлы работают параллельно, даже служебный модуль запускается один раз для каждого файла.
Также я бы хотел, чтобы у меня не было 1 уникального тестового файла. Я понимаю, что это обходной путь, но мне было интересно, есть ли простое и чистое решение. Идеальный сценарий: "Сначала сделайте что-нибудь асинхронное, затем выполните тесты параллельно". Не должно быть так сложно, нет?
1 ответ
Что я хотел бы сделать, это загрузить файл в globalSetup
, а затем настройте свой дб и макет макет либо в __mocks__
каталог или в setupFiles
чтобы избежать необходимости настраивать его явно в каждом тесте.
__mocks__
директория предпочтительнее, поскольку макет запускается только тогда, когда ваш код требует этот файл, а не в каждом отдельном тесте.