こんにちは
4.12.0
動作中のアプリ(Express + mangoose)にMocha / Chaiテストを追加しましたが、アプリを実行しているときに表示されないものに気づきました。
問題
私のユニットテストを実行しているとき、プロセスは決して終了せず、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
を使用するたびに、常にこれらの警告が表示されます
DeprecationWarning:
open()
はmongoose> = 4.11.0で非推奨になりました。代わりにopenUri()
を使用するか、connect()
またはcreateConnection()
を使用する場合はuseMongoClient
オプションを設定してくださいcreateConnection()
。 http://mongoosejs.com/docs/connections.html#use-mongo-clientを参照してください
ノード上のim: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();
}());
まあ、私の悪いこれはマングースのせいではありませんでした。
私はmochaを使用しており、process.exitの呼び出しを強制するために--exit
パラメーターを追加する必要がありました。
このパラメータがないと、モカはテストの最後に何もせずに待機します。
プロセスを強制的に終了させることは、単なる回避策です。 問題は、複数の接続を開いていてmongoose.disconnect()
を使用している場合でも、ソケットは開いたままになっているように見えることです。
最も参考になるコメント
プロセスを強制的に終了させることは、単なる回避策です。 問題は、複数の接続を開いていて
mongoose.disconnect()
を使用している場合でも、ソケットは開いたままになっているように見えることです。