#node.js #mongodb #typescript #mongoose #jestjs
#node.js #mongodb #typescript #мангуст #jestjs
Вопрос:
Я настраиваю mongodb-memory-server в своем бэкэнде для целей тестирования и испытываю некоторые проблемы при запуске тестов, которые мне нужно отладить. Моя проблема в том, что когда я запускаю свой тест (который создаст документ mongodb где-нибудь в тестируемой службе), время ожидания теста истекает.
Насколько я понимаю, это связано с тем, что при выполнении теста и попытке создания нового документа mongo во время теста я регистрирую mongoose.connection.readyState в консоли, и он говорит, что это 0, что означает, что mongoose отключен. Это странно для меня, потому что я добавил журналы консоли в свою функцию connectMongoose () (на фото ниже), и в нем говорится, что mongoose подключен.
Итак, мой главный вопрос: почему в нем говорится, что mongoose подключен в конце connectMongoose(), но говорится, что он отключен во время выполнения модульной тестовой / сервисной функции? Как я могу убедиться, что MongoDB-memory-server полностью подключен до выполнения теста?
Ниже приведен скриншот, показывающий, как я выполняю тестовое соединение mongoose:
Ниже приведен скриншот того, где и как именно используется mongodb-memory-server:
Вот скриншот моего jest.config.js:
И, наконец, фактический тестовый файл, в котором есть неудачный тест (о чем я спрашиваю):
Комментарии:
1. Пожалуйста, предоставьте фактический код вместо скриншотов.
2. Учитывая, что этот вопрос требует редактирования для удаления изображений, и учитывая, что для его решения требуется больше деталей, я голосую за то, чтобы пока отложить его.
Ответ №1:
beforeAll(connectMongoose)
beforeEach(clearDatabase)
afterAll(disconnectMongoose)
Ваши три функции здесь являются асинхронными функциями, но вы их не ожидаете — возможно ли, что connect Mongoose
возвращает, пока обещание все еще ожидает, а другой код продолжается, несмотря на то, что асинхронная функция еще не завершена?
Возможно, это лучше послужит вашей цели?
beforeAll(() => {
await connectMongoose
})
Комментарии:
1. извините, это все еще приводит к тайм-ауту теста
Ответ №2:
Перед :
beforeAll(connectMongoose)
beforeEach(clearDatabase)
afterAll(disconnectMongoose)
После:
beforeAll(async() => {await connectMongoose})
beforeEach(async() => {await clearDatabase})
afterAll(async () => { await disconnectMongoose})
Причина в том, что вам следует подождать, пока соединение с мангустом не будет выполнено полностью, и удалить
установленное время ожидания в функции connectMongoose, которая там не нужна.Если вы хотите использовать тайм-аут шутки, вы можете использовать его в функции beforeEach.
Комментарии:
1. извините, это все еще приводит к тайм-ауту теста
2. обе асинхронные функции с ожиданием