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__ директория предпочтительнее, поскольку макет запускается только тогда, когда ваш код требует этот файл, а не в каждом отдельном тесте.

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