Как определить переменные env перед импортом в jest?

#node.js #typescript #mongoose #jestjs

Вопрос:

В моем модульном тесте есть импортированный модуль import { DeviceFromDb1 } from '../Device' , который представляет собой файл, связанный с определением схемы мангуста.

Причина, по которой я сталкиваюсь с этим вопросом, заключается в следующем: в этом файле мне нужно заполнить данные из другой базы данных, и вот как я это сделал:

../Файл устройства:

 const conn = mongoose.createConnection(  process.env.MONGODB_URI   '/'   process.env.ADMINDB );  const adminDbModel = getAdminModel(conn); // this function will return the model I want from the adminDb  // Inside Schema definition, I used 'ref: adminDbModel' to do the populate  

Для модульного теста я использую сервер MongoMemoryServer. Обычно в других модульных тестах я открываю новый сервер MongoMemoryServer и устанавливаю его uri в качестве переменной Env MONGO_URI. Однако этот подход не работает в этом модульном тесте, так как при импорте модуля и MONGODB_URI, и ADMINDB не определены, поэтому mongoose.createConnection возникает ошибка «MongoParseError: Недопустимая строка подключения «неопределенный/неопределенный»». Оказывается, этот модуль загружается до начала моего модульного теста(раньше, чем до каждого, до всего).

Подход, который я пробовал:

  1. Файлы настройки Предварительно определив ENV в файлах настройки, я мог бы задать значение ENV, и это работает, если я хочу, чтобы console.log(process.env.ADMINDB) в ../Device.ts. Однако MONGODB_URI-это динамическое значение, которое не будет известно до тех пор, пока не будет создан новый сервер MongoMemoryServer.
  2. На верхнем уровне await я пытался запустить async/await(получить новый сервер MongoMemoryServer и установить ENV) раньше import { DeviceFromDb1 } from '../Device' , но это тоже не помогает.

Я надеюсь, что вы можете дать мне подсказку, нужно ли в любом случае определять ENV до загрузки модуля, или я неправильно использую заполнение(я могу получить желаемый результат, вызвав конечную точку, поэтому я предполагаю, что этот подход в порядке).

Комментарии:

1. Начните MongoMemoryServer с вашего setupFiles файла.

2. @hoangdv Да, этот подход в какой-то степени решает проблему. Но проблема в том, что для некоторых модульных тестов я использовал MongoMemoryReplSet вместо MongoMemoryServer . Есть ли в любом случае способ сделать его более динамичным?