2011-01-19 13 views
2

私はnode.jsプロジェクトを開始しました。最初の単体テストを書く段階です。node.jsクライアントがサーバーと同じプロセスのときに「ピアで接続をリセットする」

ユニットテストでは、サーバーを起動してクライアントを作成し、サーバーに要求を送信します。私はその反応について断言するつもりです。

ここでは、2つの別々のjsファイルを使用して、サーバーを起動し、クライアントの別のjsファイルを別のノードインスタンスで実行すると、正常に動作します。サーバーが起動し、私は他のjsを実行し、クライアントは要求を正常に行います。

しかし、同じコードを単一のjsに入れて単一のノードインスタンス内で実行すると、クライアントが接続しようとしたときに「ピアによって接続がリセットされました」というエラーが表示されます。私はsetTimeoutを使ってサーバーの起動後に数秒間リクエストを遅らせようとしましたが、ソケットでエラーをキャッチしようとしました。いずれのアプローチも役に立たないようです。

私は本当にこのプロセスを1つのプロセスとして実行したいと考えています。単体テストの作成と管理が非常に簡単になります。誰かが私が間違っていることを考えているのですか?

おかげ マーティン

答えて

1

documentation

server.listen(ポート、[ホスト名]、 [コールバック])指定されたポートと ホスト名に 接続の受け入れを開始しますから。ホスト名が省略された場合、 サーバは (INADDR_ANY)のいずれかのIPv4アドレス宛の接続 を受け入れます。

UNIXソケットを待機するには、ポートとホスト名の代わりに というファイル名を指定します。

この関数は非同期です。サーバが ポートにバインドされている場合、 最後のパラメータコールバックは と呼ばれます。

server.listen(パス、[コールバック])

私はあなたがcallback中から、あなたのユニットテストを行うべきだと思いますか?

少なくともそれは私のために働いた。それは素晴らしいですので私はexpress.jsを使用しています。私はまた、HTTPリクエストを作成するwwwdudeを使用していますが、次のスニペットは、私のために働くん:応答のための

const PORT = 1234; 
const HOST = 'localhost'; 

const assert = require('assert'); 
const wwwdude = require('wwwdude'); 
const express = require('express'); 
const app = module.exports = express.createServer(); 
const client = wwwdude.createClient({ 
    headers: { 'User-Agent': 'wwwdude test 42' }, 
}); 

app.use(
    express.staticProvider(__dirname + '/public') 
); 

app.get('/', function(req, res) { 
    res.send('Hello World!'); 
}); 

if (!module.parent) { 
    app.listen(PORT, HOST, function() { 
     client.get('http://localhost:1234') 
     .addListener('error', function (err) { 
     }).addListener('success', function (data, resp) { 
      assert.equal('Hello World!', data); 
      process.exit(); 
     }).send(); 
    }); 
} 
+0

感謝を。しかし、私はそれがどのように私の質問に答えるか分からない。同じプロセスでクライアントからサーバーに接続している場合は、何か特別な処理が必要であると書かれているものはありません。多分私は遅いです、あなたは私のためにそれを綴ることができますか? – martinp999

+0

私は休暇中でしたが、引用符は "この関数は非同期です。サーバーがバインドされたときに最後のパラメータコールバックが呼び出されます。"あなたはドキュメンテーションでそれを探す必要がありますか? – Alfred

関連する問題