1. ホーム
  2. unit-testing

[解決済み] ExpressJS のインスタンスをプログラムでシャットダウンするにはどうすればよいですか?

2022-07-29 20:04:39

質問

Express のインスタンスをシャットダウンする方法について考えています。基本的に、私は .listen(port) の呼び出しの逆を行いたいのですが、どうすれば Express サーバーがリッスンを停止し、ポートを解放して、きれいにシャットダウンできるでしょうか。

これは奇妙なクエリである可能性があるため、文脈を説明します。おそらく、これにアプローチする別の方法があり、私はそれについて間違った考えをしています。私はsocket.io/nodejsアプリのためのテストフレームワークをセットアップしようとしています。これはシングルページのアプリで、私のテストスクリプトでは(私は Mocha を使用していますが、それは本当に重要ではありません)、私はサーバを起動し、それに対してテストを実行し、その後サーバをシャットダウンすることができるようにしたい。テストが始まる前にサーバーがオンになっていると仮定するか、テストのひとつがサーバーを起動し、その後のすべてのテストがサーバーを起動していると仮定することでこれを回避することができますが、これは本当に厄介なことです。私は、各テストファイルが適切な設定でサーバインスタンスを起動し、テストが終了したらそのインスタンスをシャットダウンする方がはるかに望ましいと思います。そうすれば、テストを実行する際に奇妙な依存関係が発生することもなく、すべてがきれいに保たれます。それはまた、私がスタートアップ/シャットダウン テストを行うことができることを意味します。

これを行う方法について、何かアドバイスはありますか?手動で例外をトリガーして停止させることも考えましたが、それは面倒なようです。Express のドキュメントとソースを徹底的に調べましたが、サーバーをシャットダウンするメソッドは見つかりませんでした。ソケット サーバーは Express サーバーに接続されているだけなので、これは Express レイヤーで実行する必要があると思います。

どのように解決するのですか。

変更になったこと は、express サーバが node http サーバを継承しなくなったからです。幸いなことに、app.listen はサーバー インスタンスを返します。

var server = app.listen(3000);

// listen for an event
var handler = function() {
  server.close();
};