Mongoose: Процесс модульного тестирования не завершается из-за мангуста?

Созданный на 16 окт. 2017  ·  3Комментарии  ·  Источник: Automattic/mongoose

Привет
4.12.0

Я добавил тест Mocha/Chai в свое рабочее приложение (Express+mangoose) и заметил что-то, чего не было видно при запуске приложения.

Проблема
При запуске моих модульных тестов процесс никогда не завершается и зависает из-за мангуста (очевидно).

В приведенном ниже фрагменте кода нет ничего удивительного... Я попробовал mongoose#disconnect в самом конце теста, но ничего не меняет.

Не могли бы вы посоветовать, что блокирует выход из процесса?

const mongoose = require('mongoose');
import { databaseConfig } from './config/database';

export function setupDatabase() {
  mongoose.Promise = require('bluebird');
  //mongoose.set("debug", true)
  var connection = mongoose.connect(databaseConfig.database, { useMongoClient: true }, (err) => { console.log("Connect error: " + err) });

  mongoose.connection.on('connected', () => {
    console.log('Connected to database ' + databaseConfig.database);
  });

  mongoose.connection.on('error', (err) => {
    console.log('Database error: ' + err);
  });

  return mongoose;
}

Самый полезный комментарий

Принудительное завершение процесса — это просто обходной путь. Проблема в том, что кажется, что если у вас открыто несколько подключений и вы используете mongoose.disconnect() , он все равно оставляет сокет открытым.

Все 3 Комментарий

каждый раз, когда я использовал mongoose.connect , я всегда получаю это предупреждение

Предупреждение об устаревании: open() устарело в mongoose >= 4.11.0, вместо этого используйте openUri() или установите параметр useMongoClient , если используете connect() или createConnection() . См. http://mongoosejs.com/docs/connections.html#use -mongo-client.

я на узле: 8.7 , мангуст: 4.12.2

попробуй это,

const mongoose = require('mongoose');
mongoose.Promise = require('bluebird');
import { databaseConfig } from './config/database';


async function setupDatabase() {
  // mongoose.set('debug', true);
  return await mongoose.connection.openUri(databaseConfig.database);
}

(async function () {
  const conn = await setupDatabase();
  // closing instance
  await conn.close();
}());



Что ж, моя беда в том, что это не вина мангуста.

Я использую мокко, и мне пришлось добавить параметр --exit , чтобы вызвать вызов process.exit.

Думаю, без этого параметра мокко просто... ничего не делает в конце теста и ждет.

Принудительное завершение процесса — это просто обходной путь. Проблема в том, что кажется, что если у вас открыто несколько подключений и вы используете mongoose.disconnect() , он все равно оставляет сокет открытым.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги