#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: Недопустимая строка подключения «неопределенный/неопределенный»». Оказывается, этот модуль загружается до начала моего модульного теста(раньше, чем до каждого, до всего).
Подход, который я пробовал:
- Файлы настройки Предварительно определив ENV в файлах настройки, я мог бы задать значение ENV, и это работает, если я хочу, чтобы console.log(process.env.ADMINDB) в ../Device.ts. Однако MONGODB_URI-это динамическое значение, которое не будет известно до тех пор, пока не будет создан новый сервер MongoMemoryServer.
- На верхнем уровне
await
я пытался запустить async/await(получить новый сервер MongoMemoryServer и установить ENV) раньшеimport { DeviceFromDb1 } from '../Device'
, но это тоже не помогает.
Я надеюсь, что вы можете дать мне подсказку, нужно ли в любом случае определять ENV до загрузки модуля, или я неправильно использую заполнение(я могу получить желаемый результат, вызвав конечную точку, поэтому я предполагаю, что этот подход в порядке).
Комментарии:
1. Начните
MongoMemoryServer
с вашегоsetupFiles
файла.2. @hoangdv Да, этот подход в какой-то степени решает проблему. Но проблема в том, что для некоторых модульных тестов я использовал
MongoMemoryReplSet
вместоMongoMemoryServer
. Есть ли в любом случае способ сделать его более динамичным?