Тест с использованием mongodb-сбой сервера памяти / тайм-аут

#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. обе асинхронные функции с ожиданием