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