2

Web サーバーをテストするいくつかの単体テストがあるとします。ここで議論したくない理由により (範囲外 ;-))、すべてのテストには新しく起動したサーバーが必要です。

サーバーにリクエストを送信しない限り、すべて問題ありません。しかし、一度行うと、http サーバーのclose関数への呼び出しが期待どおりに機能しません。作成されたすべての要求がキープアライブ接続になるため、サーバーは実際に閉じる前に 120 秒間待機します。

もちろん、これはテストの実行には受け入れられません。

現時点では、私が見る唯一の解決策は次のいずれかでした

  • キープアライブ タイムアウトを に設定する0と、 を呼び出すcloseと実際にサーバーが閉じられます。
  • または、各サーバーを異なるポートで起動しますが、多くのテストがある場合、これは扱いにくくなります。

この状況に対処する方法の他のアイデアはありますか?

PS: Node.js http(s) サーバーをすぐにシャットダウンするにはどうすればよいですか? 少し前にそれを回避する実行可能な方法を見つけましたが、時々奇妙な結果が得られるため、この回避策は常に確実に実行されるとは限りません.

4

1 に答える 1

1
function createOneRequestServer() {
    var server = http.createServer(function (req, res) {
        res.write('write stuff');
        res.end();
        server.close();
    }).listen(8080);
}

process を使用してプロセスを fork し、そのプロセスでテストした後にそれらを強制終了することも検討できます。

var child = fork('serverModuleYouWishToTest.js');

function callback(signalCode) {
    child.kill(signalCode);
}

runYourTest(callback);

この方法は、1 つの要求のみを処理するサーバーの特殊なケースを記述する必要がなく、テスト コードと実稼働コードが 100% 独立しているため、望ましい方法です。

于 2013-07-26T16:21:36.977 に答える