Тестирование с помощью Jest с использованием mongoose: «существуют асинхронные операции, которые не были остановлены в ваших тестах» - PullRequest
0 голосов
/ 02 июля 2018

Я использую supertest с jest для тестирования небольшого KOA API, который использует mongoose. Вот код теста:

const app = require('./app')
const request = require('supertest')

test('respond with json', async () => {
  return request(app.callback())
    .get('myurl')
    .set('Accept', 'application/json')
    .expect('Content-Type', /json/)
    .expect(200)
})

Если я запускаю jest с npm test, я получаю эту ошибку (тесты проходят, но Jest не завершается успешно):

Jest не вышел из системы через одну секунду после завершения пробного запуска.

Обычно это означает, что существуют асинхронные операции, которые не были остановлены в ваших тестах. Для устранения этой проблемы попробуйте запустить Jest с --detectOpenHandles.

Согласно этому ответу мне нужно закрыть соединение mongoose.

Итак, я попробовал это:

const app = require('./app')
const request = require('supertest')
const mongoose = require('mongoose')

test('respond with json', async () => {
  return request(app.callback())
    .get('myurl')
    .set('Accept', 'application/json')
    .expect('Content-Type', /json/)
    .expect(200)
})

afterAll(() => mongoose.disconnect())

... но, похоже, не работает, потому что у меня новая ошибка:

console.error node_modules/jest-jasmine2/build/jasmine/Env.js:157
    Unhandled error
console.error node_modules/jest-jasmine2/build/jasmine/Env.js:158
    Error [ERR_UNHANDLED_ERROR]: Unhandled error. (MongoError: topology was destroyed)
    at Function.emit (events.js:171:17)
    at done (/x/node_modules/mongoose/lib/model.js:1076:13)
    at /x/node_modules/mongoose/lib/model.js:1118:16
    at /x/node_modules/mongoose/lib/utils.js:447:16
    at err (/x/node_modules/mongodb/lib/utils.js:415:14)
    at session.endSession (/x/node_modules/mongodb/lib/utils.js:399:27)
    at ClientSession.endSession (/x/node_modules/mongodb-core/lib/sessions.js:72:41)
    at executeCallback (/x/node_modules/mongodb/lib/utils.js:397:17)
    at err (/x/node_modules/mongodb/lib/utils.js:415:14)
    at executeCallback (/x/node_modules/mongodb/lib/utils.js:404:25)
...

И у меня все еще есть это сообщение:

Jest не вышел из системы через одну секунду после завершения пробного запуска.

Обычно это означает, что существуют асинхронные операции, которые не были остановлены в ваших тестах. Для устранения этой проблемы попробуйте запустить Jest с --detectOpenHandles.

Я не понимаю, почему у меня есть эти ошибки и как я могу их избежать.

Я могу отредактировать свой ответ, если потребуется!

...