Mongoose: マングースが原因でユニットテストプロセスが終了しませんか?

作成日 2017年10月16日  ·  3コメント  ·  ソース: Automattic/mongoose

こんにちは
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.disconnect()を使用している場合でも、ソケットは開いたままになっているように見えることです。

全てのコメント3件

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()を使用している場合でも、ソケットは開いたままになっているように見えることです。

このページは役に立ちましたか?
0 / 5 - 0 評価