2

たとえば、私が次のものを持っているとしましょう

app.get('/', function(req, res) {
    var ip;
    if(req.headers['x-forwarded-for']){
        ip = req.headers['x-forwarded-for'];
    }
    else {
        ip = req.connection.remoteAddress;
    }
});

ipが正しく取得されているかどうかを確認するために単体テストを行いたいと思います。1つの方法は次のとおりです

function getIp(req) {
    var ip;
    if(req.headers['x-forwarded-for']){
        ip = req.headers['x-forwarded-for'];
    }
    else {
        ip = req.connection.remoteAddress;
    }
    return ip;
}

app.get('/', function(req, res) {
    var ip = getIp(req);
});

これで、単体テストが可能な関数getIpができました。しかし、私はまだ立ち往生しています。シミュレートされたreqオブジェクトをgetIpにフィードするにはどうすればよいですか?

4

2 に答える 2

2

そのための統合テストを書くだけです。Node.js は十分に高速です。特にモカのウォッチモードのようなものを使用する場合. スーパーエージェントやリクエストなどを使用して、http リクエストを実行できます。

たとえば、httpリクエストをモックアウトするnockのようなものもあります。統合テストは実際のものをテストし、私の好みには十分な速度であるため、使用したことはありません。

于 2012-06-21T05:31:30.003 に答える
0

mochaを使用して単体テストを作成することをお勧めします。その場合は、httpクライアントとして「request」を使用します。ただし、開始する最も簡単な方法は、次を使用することです。

var http = require('http');
//Change to the ip:port of your server
var client = http.createClient(3000, 'localhost'); 

var request = client.request('GET', '/',
  {'host': 'localhost'});
request.end();
request.on('response', function (response) {
  console.log('STATUS: ' + response.statusCode);
  console.log('HEADERS: ' + JSON.stringify(response.headers));
  response.setEncoding('utf8');
  response.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});
于 2012-06-21T20:26:55.567 に答える