1

接続ミドルウェアの統合テストをいくつか作成し、モック リクエストではなくリアル http リクエストでテストしたいと考えています。

ミドルウェア スタックは、渡された構成に応じて異なる動作をするため、各テストの後に異なる構成で再起動できるサブプロセスとしてミドルウェア サーバーを実行したかったのです。

問題は、テスト サーバーが問題なく実行され (ether が直接またはテスト ファイル内で開始され)、ブラウザー経由でアクセスできることですが、接続が拒否されたため、http.get(..) 経由で応答が得られません。

Error: connect ECONNREFUSED

これが私のセットアップです...

//MOCHA TEST FILE: testServer.test.js

function runTestServer(configEnv) {

    var cmd = "node " + path.resolve(__dirname, "runTestServer.js");

    var testSrv = exec(cmd, { "env" : configEnv },
    function (error, stdout, stderr) {
        if (error !== null) {
            console.log('exec error: ' + error);
        }
    });

    return testSrv;
}


describe("onRequest", function(){
    it("should return a response", function (done) {

        this.timeout(100000);

        var serverInstance = runTestServer({
            "appDir" : path.resolve(__dirname, "../../handleHttp/app")
        });

        http.get({host:'localhost', port:9090, path:'/'}, function (res) {
            //error thrown before this callback gets called
        });

    });
});

これは、サブプロセスとして実行される te​​stServer.js ファイルの内容です。

//Test-Process-File: runTestServer.js
var connect = require("connect"),
handleHttp = require("...")

var server = connect();
handleHttp.init(server); //this methods applies the middleware
console.log("TEST-SERVER listening on 9090");
server.listen(9090);
4

1 に答える 1

0

質問を投稿しているときにこれを見つけたので、他の誰かが同じ種類の問題を抱えている場合に備えて、ここで答えたいと思います。

だから問題は何ですか?

全体が非同期です!

そのため、リクエストがサーバーに送信される前にサーバーが初期化されることはありません。

解決

サブプロセスを初期化し、testServer-Loader Async を作成する時間を与えてください!

function runTestServer(configEnv, callback) {

    var cmd = "node " + path.resolve(__dirname, "../runTestServer.js"),
    testSrv;

    testSrv = exec(cmd, { "env" : configEnv },
                 function (error, stdout, stderr) {
                   if (error !== null) {
                     console.log('exec error: ' + error);
                  }
              });

    setTimeout(function() {
        callback(testSrv);
    }, 1000);
}

私のモカテストファイル:

describe("handleHttp", function() {
  describe("#Basic Requesting", function() {

    var serverInstance;

    before(function(done) {
        runTestServer({
            "appDir" : path.resolve(__dirname, "...")
        }, function(srvInstance) {
            serverInstance = srvInstance;
            done();
        });
    });

    //run your tests here 

固定タイムアウトは、実際には良い解決策ではありません。http-server の準備ができているかどうかを確認するために、メインプロセスとサブプロセスの間の通信を有効にすることは可能かもしれません。提案をいただければ幸いです。

于 2012-07-02T10:58:20.253 に答える